欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lambda实践

程序员文章站 2022-07-13 09:39:13
...

Lambda实践

1.引言

​ 在java1.8之后,开始支持使用Lambda表达式,及函数式编程。极大地简化了代码。特别是在对List进行处理的时候,十分简洁和清爽。

2.常用的流

因为经常使用List进行操作,所以下面的示例也都已List作为demo

1.collect(Collectors.toList()):将流转换成一个List

2.filter():过滤List中符合条件的数据

3.map():将List进行一些转换

4.flap():将多个Stream合并成一个流

5.max()/min():获取集合中最大/最小值的对象

6.count():对集合执行统计

7.reduce():从一组值中生成一个值

8.averagingInt():获取平均值

下面贴代码,开始实践
1.新建一个学生类(推荐使用lombok,自动构建getter,setter,toString等方法)

@Data
@AllArgsConstructor
public class Student {

    private String name;
    private Integer age;
    private Integer height;
}

2.测试类

public class LambdaTest {
    public static void main(String[] args) {
        // collect(Collectors.toList())
        List<Student> students = Stream.of(new Student("鲁班七号", 18, 150), new Student("狄仁杰", 19, 170)
                , new Student("虞姬", 20, 175)).collect(Collectors.toList());
        System.out.println(students);

        // filter
        List<Student> filterList = students.stream().filter(student -> student.getAge() < 20).collect(Collectors.toList());
        System.out.println("年龄小于20岁的集合:" + filterList);

        // map
        List<String> nameList = students.stream().map(student -> student.getName()).collect(Collectors.toList());
        System.out.println("姓名集合为:" + nameList);

        // flatMap
        List<Student> students2 = Stream.of(new Student("孙尚香", 22, 165), new Student("后羿", 23, 180)).collect(Collectors.toList());
        List<Student> flatStudents = Stream.of(students, students2).flatMap(students1 -> students1.stream()).collect(Collectors.toList());
        System.out.println("两个student集合为:" + flatStudents);

        //max min
        Optional<Student> max = students.stream().max(Comparator.comparing(student -> student.getAge()));
        Optional<Student> min = students.stream().min(Comparator.comparing(student -> student.getAge()));
        if (max.isPresent()) {
            // 最大的值不为空
            System.out.println("max Age Student:" + max);
        }
        if (min.isPresent()) {
            System.out.println("min Age student:" + min);
        }

        // count    一般结合filter使用
        long count = students.stream().filter(student -> student.getAge()< 18).count();
        System.out.println("count:" + count);

        // reduce 可以从一组值中生成一个值
        Integer reduce = Stream.of(1, 2, 3, 4, 5).reduce(0, (a, b) -> a + b);
        System.out.println("reduce: " + reduce);

        // 获取students中的平均年龄
        Double avgAge = students.stream().collect(averagingInt(Student::getAge));
        System.out.println("avgAge:" + avgAge);


    }
}

3.看看打印结果
Lambda实践

注:建议自己上手实践一遍,同时在工作中使用这个进行编程,熟能生巧,加油!