Live2D
欢迎阅读『Stream流的常用操作』

Stream流的常用操作

Stream流的一些操作

这段时间在项目开发中使用到Java8 的 Stream流操作发现真的特别方便,这里总结了一些常用的stream流操作.

1 简介

在使用Stream流之前先来简单介绍一下:

1 Stream事java8才提供的一种以流的方式来处理数据集的一种手段,凡是属于Collection接口之下的所有字类或者子接口都可以使用Collection.stream()方法来获取到一个流对象;

2 Java8的API有提到过每一个Colection的Stream流只能执行一次,如果想要再次执行只能重现创建,因为Stream流默认会在执行后自动关闭流

(这一点查看API可以发现其实Stream接口extends了BaseStream接口,而BaseStream接口又extends了AutoColseable接口,所以不需要我们每次使用之后手动关闭流)

3 Stream屏蔽了直接操作集合中某一个元素的遍历方式,而是更关心对元素集合的聚合操作计算(比如分组,求和,排序,筛选等操作);

4 虽然不能直接操作某一个元素,但是我们可以使用BaseStream.iterator()方法对每一个元素进行迭代,使用BaseStream.spliterator()方法对元素的拼接操作等;

如果看API可能会觉得有点懵逼,但是其实我们可以简单的进行理解

Stream就是提供了一种对Collection集合中元素进行聚合操作的一种工具,我们使用Stream流可以完成SQL层面上几乎所有聚合函数操作,以及过滤等操作;

使用Stream流避免了我们使用循环去操作元素然后进行聚合的麻烦;

大致就是这个意思,如果你使用Stream流的时候得心应手,对你的代码效率和时间效率都会大大提高,所以在操作集合元素之前首先考虑能不能使用Stream流来完成是一个不错的选择,可能会避免你出现很多错误;

当然如果你jdk不支持当我没说!!!

2 常用操作

常用操作就不再一一举例子和详细说明了,都是API我就只写例子,只要有点java基础的一看就能明白什么意思

2.1 根据某一字段分组

Map<String, List<IotHzsStB>> listMap = list.stream().collect(Collectors.groupingBy(IotHzsStB::getSttp));

2.2 抽取某一个字段

List<Long> collect = menuList.stream().map(SysMenu::getId).collect(Collectors.toList());

2.3 过滤

Long tYellAlarmNum = iotAlarmS.stream().filter(item -> item.getAlarmType().equals(ConstantEnum.IOT_ALARM_TYPE_1.getValue())).filter(item -> item.getLevel().equals(ConstantEnum.IOT_ALARM_LEVEL_0.getValue())).count();

2.4 排序(多字段)

returnList = returnList.stream().sorted(Comparator.comparing(IotPpJcResponse::getDrp,Comparator.reverseOrder()).thenComparing(IotPpJcResponse::getAddvcd,Comparator.reverseOrder())).collect(Collectors.toList());

2.5 取出第一个集合中第一个元素

list.stream().findFirst().get();

2.6 是否匹配(有一个匹配就是true)

boolean isAdmin = sysUserRoleList.stream().anyMatch(r -> "admin".equalsIgnoreCase(r.getRoleCode()));

2.7 是否匹配(所有元素都匹配返回true)

boolean isAdmin = sysUserRoleList.stream().allMatch(r -> "admin".equalsIgnoreCase(r.getRoleCode()));

2.8 是否匹配(都不匹配返回true)

boolean isAdmin = sysUserRoleList.stream().noneMatch(r -> "admin".equalsIgnoreCase(r.getRoleCode()));

3 结束语

暂时就这么多吧 ,因为这几个见到的次数比较多一点,当然还有很多常用操作没有记录,后期遇到再进行补充

上面有的操作可能涉及好多个子操作,比如过滤中使用到了count()统计等等。

posted @   lkai  阅读(67)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
Live2D
欢迎阅读『Stream流的常用操作』
点击右上角即可分享
微信分享提示