Lambda表达式的使用对比样例
1、比较两个数的大小
//原来使用匿名内部类
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
};
TreeSet<Integer> ts1 = new TreeSet<Integer>(com1);
//------------------------------------------------------------
//Lambda表达式
Comparator<Integer> com2 = (x, y)-> Integer.compare(x, y);
TreeSet<Integer> ts2 = new TreeSet<>(com2);
2、策略模式对比Lambda
//创建员工数据集demo
List<Employee> employees = Arrays.asList(
new Employee("张三",18,new BigDecimal(6000.00)),
new Employee("李四",28,new BigDecimal(12000.00)),
new Employee("王五",38,new BigDecimal(20000.00)),
new Employee("赵六",48,new BigDecimal(17000.00)),
new Employee("田七",58,new BigDecimal(3000.00))
);
//根据年龄过滤员工
List<Employee> list1 = filterEmployee(employees, new FilterEmployeeByAge());
System.out.println(list1);
//根据工资过滤员工
List<Employee> list2 = filterEmployee(employees, new FilterEmployeeBySalary());
System.out.println(list2);
//定义一个泛型的通用接口
public interface MyPredicate<T> {
public boolean test(T t);
}
//用一个类实现自定义断言方法
public class FilterEmployeeBySalary implements MyPredicate<Employee> {
@Override
public boolean test(Employee employee) {
return employee.getSalary().doubleValue() >= 15000L;
}
}
//通用的调用方法
public List<Employee> filterEmployee(List<Employee> list, MyPredicate<Employee> mp){
List<Employee> emps = new ArrayList<>();
for (Employee employee:list) {
if (mp.test(employee)){
emps.add(employee);
}
}
return emps;
}
//根据工资过滤工资小于8000的员工
List<Employee> list3 = filterEmployee(employees, new MyPredicate<Employee>() {
@Override
public boolean test(Employee employee) {
//查询工资小于8000的员工
return employee.getSalary().doubleValue() <= 8000;
}
});
System.out.println(list3);
List<Employee> list4 =
filterEmployee(employees, e -> e.getSalary().doubleValue() >= 20000);
System.out.println(list4);
employees.stream()
.filter(e->e.getSalary().doubleValue() >= 12000)
.forEach(System.out::println);