01.Lambda表达式的使用样例

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);
  • Lambda表达式
List<Employee> list4 = 
    filterEmployee(employees, e -> e.getSalary().doubleValue() >= 20000);
System.out.println(list4);
  • stream API
employees.stream()
        .filter(e->e.getSalary().doubleValue() >= 12000)
        .forEach(System.out::println);

猜你喜欢

转载自www.cnblogs.com/jwhu/p/12976993.html