两篇博客带你搞定Java8 Stream操作 第二篇

前言

上篇文章我们介绍了Stream流的最终操作!

中间操作

Filter操作

通过名字,我们就能知道,filter是用于过滤的。通过自定义过滤条件,就可以根据条件对流中的元素进行相应的过滤操作!

//过滤出成绩大于99的人的集合
 List<Person> collect = s.filter(person -> person.getScole() > 99).collect(Collectors.toList());
 System.out.println(collect);
Distinct去重

distinct操作可以帮助我们快速去除集合中的重复元素,distinct的去重规则如下

  • 先判断 hashCode()
  • 再判断 equals()
    只有两个条件都满足了,才会被认定为重复元素,进行去重
 List<Person> collect1 = s.distinct().collect(Collectors.toList());
sorted排序

sorted方法可以对流中元素进行排序。
他有两个方法:

  • 无参方法:需要对流中元素对应的类实现comparable接口,指定比较规则
  • 有参方法:直接在参数中指定比较规则
s.sorted((ele1,ele2)->ele1.getAge()-ele2.getAge()).forEach(System.out::println);
limit

只取流中前指定为的元素

s.limit(3).forEach(System.out::println);
//输出集合中前三条元素
skip

跳过流中的元素,获取剩下的元素

s.skip(3).forEach(System.out::println);
//跳过集合中前三条数据,打印剩下的元素
map

map方法是将指定的Stream中元素进行“平级”处理,每个元素转化为各自所对应的一个Stream集合

//这里展示一下我在公司项目中用到的
//将这个集合中的procInstId转换为一个数组
String[] procInstIds = punchResultEntityList.stream()
                .map(approvalList -> approvalList.getProcInstId())
                .collect(Collectors.toList()).toArray(new String[punchResultEntityList.size()]);
//map操作可以做很多的事情
//map的操作语句可以加上大括号后,就可以写多行语句了!但是写成如下格式后,需要有返回值;也就是return语句
String[] procInstIds = punchResultEntityList.stream()
                .map(approvalList ->{
                approvalList.getProcInstId();
                return approvalList;
                } )
                .collect(Collectors.toList()).toArray(new String[punchResultEntityList.size()]);

在很多时候我们只是想对集合中的某个元素进行某种操作,不需要返回什么,所以这个时候,就可以用peek操作代替map操作!

//peek操作是不需要返回值的
String[] procInstIds = punchResultEntityList.stream()
                .peek(approvalList ->{
                approvalList.getProcInstId();
                } )
                .collect(Collectors.toList()).toArray(new String[punchResultEntityList.size()]);

stream扩展

将数组转换为流
String[] players={"1","2","3","4"};
Stream.of(players).filter().collect(Collectors.toList());
将文件中的元素转换为流

有一个文本类型的文件,
file.txt

1
2
3
4
Stream<String> fileStream=files.lines(Path.get("file.txt");
List<String> list=fileStream.collect(Collectors.tolist());

Stream中间操作分为一下两种:

  • 无状态操作
    • filter
    • map
    • flatmap
  • 有状态操作
    • distinct
    • limit
    • skip
    • sorted
      Stream也可以实现并发操作,那就是使用并行流!
s.stream.parallel().map();

在面对大量的数据的时候,我们可以使用并行流极大的加快流的处理速度。
但是并不是所有的操作都适合使用并行流。
并行流的操作会影响有状态的操作。

并行流非常适合处理一下几种类型的数据:

  • ArrrayLists
  • HashMaps
  • PlainArrays

Stream流极大的简化了我们的代码,让我们的代码看起来更加优雅,但是stream相比于for循环在性能上表现又如何呢?

并行流>>stream约等于for循环
甚至对于某些数据类型,stream的效率要高于for循环!所以大家可以放心的使用了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLLDa_&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值