Java8新特性Lambda表达式

package cn.mldn.java8;
//Lambda表达式是一个匿名函数,可以直接传递代码,灵活性很强


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;


import org.junit.Test;


public class TestLambda {
//匿名内部类
@Test
public void test1()
{
Comparator com=new Comparator() {
@Override
public int compare(Integer o1,Integer o2) {
return Integer.compare(o1,o2);//核心代码
}
};
TreeSet ts=new TreeSet(com);
}
  //Lambda表达式
@Test
public void test2()
{
Comparator com=(o1,o2)->
{
return Integer.compare(o1,o2);//核心代码
};
TreeSet ts=new TreeSet(com);
}
List employees=Arrays.asList(
new Employee("小赵",20,9000),
new Employee("小王",21,8000),
new Employee("小张",35,7000),
new Employee("小李",36,6000),
new Employee("小刘",37,5000)
);
//获取当前公司中员工年龄大于35的员工信息
@Test
public void test3()
{
List emps=filterEmployee(employees);
for(Employee emp:emps)
{
System.out.println(emp);
}
}
//获取当前公司中员工工资大于7000的员工信息
@Test
public void test4()
{
List emps=filterEmployee2(employees);
for(Employee emp:emps)
{
System.out.println(emp);
}
}
//获取当前公司中员工年龄大于35的员工信息(JDK1.8以前)
public  List filterEmployee(List list)
{
List emps=new ArrayList();
for(Employee emp:list)
{
if(emp.getAge()>=35)
emps.add(emp);
}
return emps;
}
//获取当前公司中员工工资大于7000的员工信息(JDK1.8以前)
public  List filterEmployee2(List list)
{
List emps=new ArrayList();
for(Employee emp:list)
{
if(emp.getSalary()>=7000)
emps.add(emp);
}
return emps;
}
   //以上方法出现了代码冗余,核心代码不同,其余代码相同
//优化方式:Lambda表达式
public  List filterEmployee(List list,MyPredicate mp)
{
List emps=new ArrayList();
for(Employee emp:list)
{
if(mp.test(emp))
emps.add(emp);
}
return emps;
}
//使用Lambda表达式输出接口实现类中的核心代码
@Test
public void test5()
{
List emps=filterEmployee(employees,(emp)->emp.getSalary()>7000);
emps.forEach(System.out::println);
}
//再优化:Stream API
@Test
public void test6()
{
employees.stream().filter((emp)->emp.getSalary()<=5000).forEach(System.out::println);
}
}

你可能感兴趣的:(java)