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

(学习笔记)Java8 Lambda之Stream

程序员文章站 2022-05-22 21:24:48
...

直接上Stream实际应用

1、filter:筛选过滤

students.stream().filter(student -> student.getAge() == 18).forEach(System.out::println);

(学习笔记)Java8 Lambda之Stream
利用filter做交并差集
(交集)
(学习笔记)Java8 Lambda之Stream
2、distinct去重

students.stream().distinct().forEach(student1 -> System.out.println(student1.getName() + "的hashCode:" + student1.hashCode()));

distinc的去重原理是根据每个对象的hashCode来判断,所以对应负责对象集合的去重时,需要重写equals方法和hashCode方法
(学习笔记)Java8 Lambda之Stream
3、limit截取前N和元素

students.stream().limit(2).forEach(student1 -> System.out.println(student1.getName() + "的hashCode:" + student1.hashCode()));

(学习笔记)Java8 Lambda之Stream
4、skip跳过前N个元素

students.stream().skip(1).forEach(student1 -> System.out.println(student1.getName() + "的hashCode:" + student1.hashCode()));

(学习笔记)Java8 Lambda之Stream
5、map映射(获取集合对象中的元素组成一个新的流)

List<String> str = students.stream().map(Student::getName).collect(Collectors.toList());

返回值是个stream,需要转换为list才能继续对其操作
(学习笔记)Java8 Lambda之Stream
6、anyMatch(是否存在至少一个满足条件的元素)、noneMatch(是否不存在满足条件的元素)
anyMatch

boolean b = students.stream().anyMatch(student -> student.getAge() == 18);

(学习笔记)Java8 Lambda之Stream
noneMatch

boolean b = students.stream().noneMatch(student -> student.getAge() == 24);

(学习笔记)Java8 Lambda之Stream
7、findAny(获取任一元素)、findFirst(获取第一个元素)
findAny(findFirst同理),如果取值失败则返回null(自定义)
(学习笔记)Java8 Lambda之Stream
8、reduce归约
利用reduce求合

int age = students.stream().reduce((student1, student2) -> new Student(student1.getAge() + student2.getAge())).map(Student::getAge).orElse(0);

(学习笔记)Java8 Lambda之Stream
reduce也可以接收两个参数,第一个为初始值(如果有初始值,则后续函数执行的返回结果就为第一个参数的类型),只有一个参数时,返回类型为Optional(对象)。

int age = students.stream().reduce(new Student(1),(student1, student2) -> new Student(student1.getAge() + student2.getAge())).getAge();

reduce有两个参数,第一个参数是上次函数执行的返回值(也称为中间结果),第二个参数是stream中的元素,这个函数把这两个值相加,得到的和会被赋值给下次执行这个函数的第一个参数。原理图:
(学习笔记)Java8 Lambda之Stream

相关标签: lambda