lambda和Stream API的简单入门例子

jdk1.8新增了许多新特性,其中lambda和Stream API的引入使我们的代码简洁和优雅,下面举2个简单的入门例子和jdk1.7以前做对比;

比较2个值的大小

jdk1.7以前的写法:

public void test01(){
    Comparator<Integer> com = new Comparator<Integer>() {
        @Override
        public int compare(Integer x, Integer y) {
            return Integer.compare(x,y);
        }
    };
}

Lambda表达式写法

public void test02(){
    Comparator<Integer> com = (x,y)->Integer.compare(x,y);
     //更简洁的写法
    //Comparator<Integer> com = Integer::compare;
}

查找工资大于 5000 的员工信息

员工列表:伪数据

List<Employee> emps = Arrays.asList(
            new Employee(101, "张三", 18, 12000),
            new Employee(102, "李四", 59, 10000),
            new Employee(103, "王五", 28, 9000),
            new Employee(104, "赵六", 8, 4500),
            new Employee(105, "田七", 38, 6000)
    );

jdk1.7以前的写法:

public List<Employee> filterEmployeeBySalary(List<Employee> emps){
    List<Employee> list = new ArrayList<>();

    for (Employee emp : emps) {
        if(emp.getSalary() > 5000){
            list.add(emp);
        }
    }
    return list;
}

Lambda 表达式写法

public List<Employee> selectEmployeeBySalary2(List<Employee> emps){
    List<Employee> list = emps.stream()
    		.filter(e -> e.getSalary() > 5000)
            .collect(Collectors.toList());
    return list;
}

查找工资大于8000且年龄大于等于35岁的员工信息,只找出前2条并打印

public void test04(){
    emps.stream()
            .filter((e) -> ( e.getAge()>=35 && e.getSalary()>=8000))
            .limit(2)
            .forEach(System.out::println);
}
发布了22 篇原创文章 · 获赞 6 · 访问量 492

猜你喜欢

转载自blog.csdn.net/qq_33732195/article/details/104548201