(学习笔记)Java8 Lambda之Stream

直接上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中的元素,这个函数把这两个值相加,得到的和会被赋值给下次执行这个函数的第一个参数。原理图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值