Java8 - Stream API 个人常用方法记录

Stream API

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

Stream(流)是一个来自数据源的元素队列并支持聚合操作
元素:特定类型的对象,形成一个队列。
数据源:流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
聚合操作:类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。

Pipelining:中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

一、多条件排序

sorted() − 用于对流进行排序。

通过查阅资料,发现有两种逆序排序方法:

1.Comparator.comparing(类::属性).reversed(); // 先得到.Comparator.comparing的排序结果,再逆序(两步)
2.Comparator.comparing(类::属性,Comparator.reverseOrder()); // 直接进行目标排序(一步到位)
较为推荐使用第二种方法进行排序,简单易懂

方法1.Comparator.comparing(类::属性).reversed():

1.先根据 条件1[正序]、再根据 条件2[正序]

list.sort(Comparator.comparing(Entity:getOrderNumber)
						.thenComparing((Entity::getTime)));

2.先根据 条件1[逆序]、再根据 条件2[正序]

list.sort(Comparator.comparing(Entity:getOrderNumber).reversed()
						.thenComparing((Entity::getTime)));
						
先根据条件一升序,升序结果进行逆序。再进行条件二升序。

3.先根据 条件1[逆序]、再根据 条件2[逆序]

list.sort(Comparator.comparing(Entity:getOrderNumber)
						.thenComparing((Entity::getTime)).reversed());

先根据条件一升序,在根据条件二升序,再对结果进行逆序。

4.先根据 条件1[正序]、再根据 条件2[逆序]

list.sort(Comparator.comparing(Entity:getOrderNumber).reversed()
						.thenComparing((Entity::getTime).reversed());

先根据条件一升序,升序结果逆序。再进行条件二升序,将升序结果逆序。

方法2.Comparator.comparing(类::属性,Comparator.reverseOrder());

2.先根据 条件1[逆序]、再根据 条件2[正序]

list.sort(Comparator.comparing(Entity:getOrderNumber,Comparator.reverseOrder())
						.thenComparing((Entity::getTime)));

先根据条件一降序。再进行条件二升序。

3.先根据 条件1[逆序]、再根据 条件2[逆序]

list.sort(Comparator.comparing(Entity:getOrderNumber.reverseOrder()).thenComparing()(Entity::getTime.reverseOrder()));

先根据条件一降序。再进行条件二降序。

4.先根据 条件1[正序]、再根据 条件2[逆序]

list.sort(Comparator.comparing(Entity:getOrderNumber).thenComparing()(Entity::getTime.reverseOrder()));

先根据条件一升序。再进行条件二逆序。

二、list转map

stream() − 为集合创建串行流。
Collectors 类 − 实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串

Map<Integer, EntityVO> voMap = list.stream().collect(Collectors.toMap(EntityVO::getId, EntityVO-> EntityVO));

三、其他常用方法

1.forEach() - 循环遍历
2.map() - 用于映射每个元素到对应的结果
3.filter() - 用于通过设置的条件过滤出元素
4.limit() - 用于获取指定数量的流。
5.parallelStream() - 是流并行处理程序的代替方法
6.IntSummaryStatistics - 产生int、double、long等基本类型的统计结果

参考博客:
java8 stream多字段排序——sugerWater.
Java 8 新特性——菜鸟教程.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值