(学习笔记)Java8 Lambda之Stream
程序员文章站
2022-05-22 21:24:48
...
直接上Stream实际应用
1、filter:筛选过滤
students.stream().filter(student -> student.getAge() == 18).forEach(System.out::println);
利用filter做交并差集
(交集)
2、distinct去重
students.stream().distinct().forEach(student1 -> System.out.println(student1.getName() + "的hashCode:" + student1.hashCode()));
distinc的去重原理是根据每个对象的hashCode来判断,所以对应负责对象集合的去重时,需要重写equals方法和hashCode方法
3、limit截取前N和元素
students.stream().limit(2).forEach(student1 -> System.out.println(student1.getName() + "的hashCode:" + student1.hashCode()));
4、skip跳过前N个元素
students.stream().skip(1).forEach(student1 -> System.out.println(student1.getName() + "的hashCode:" + student1.hashCode()));
5、map映射(获取集合对象中的元素组成一个新的流)
List<String> str = students.stream().map(Student::getName).collect(Collectors.toList());
返回值是个stream,需要转换为list才能继续对其操作
6、anyMatch(是否存在至少一个满足条件的元素)、noneMatch(是否不存在满足条件的元素)
anyMatch
boolean b = students.stream().anyMatch(student -> student.getAge() == 18);
noneMatch
boolean b = students.stream().noneMatch(student -> student.getAge() == 24);
7、findAny(获取任一元素)、findFirst(获取第一个元素)
findAny(findFirst同理),如果取值失败则返回null(自定义)
8、reduce归约
利用reduce求合
int age = students.stream().reduce((student1, student2) -> new Student(student1.getAge() + student2.getAge())).map(Student::getAge).orElse(0);
reduce也可以接收两个参数,第一个为初始值(如果有初始值,则后续函数执行的返回结果就为第一个参数的类型),只有一个参数时,返回类型为Optional(对象)。
int age = students.stream().reduce(new Student(1),(student1, student2) -> new Student(student1.getAge() + student2.getAge())).getAge();
reduce有两个参数,第一个参数是上次函数执行的返回值(也称为中间结果),第二个参数是stream中的元素,这个函数把这两个值相加,得到的和会被赋值给下次执行这个函数的第一个参数。原理图:
上一篇: 加密和解密cookie(登录操作)