千家信息网

Java9 Stream Collectors新增的功能怎么用

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了Java9 Stream Collectors新增的功能怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java9 Stream Collector
千家信息网最后更新 2025年02月01日Java9 Stream Collectors新增的功能怎么用

这篇文章主要介绍了Java9 Stream Collectors新增的功能怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java9 Stream Collectors新增的功能怎么用文章都会有所收获,下面我们一起来看看吧。

Java 9 Stream Collectors新增功能

Java 8 引入Collectors,用于累加输入元素至可变的容器如,Map、List以及Set。本文看看Java 9 新增的两个Collectors:Collectors.filtering 和 Collectors.flatMapping,主要用于和 Collectors.groupingBy 一起提供智能的元素集合.

Collectors.filtering方法

Collectors.filtering方法类似于Stream filter()方法,后者用于过滤输入元素,但两者的使用场景不同。Stream filter()在stream链接方法中使用,而Collectors.filtering方法被设计和 groupingBy一起使用。

Stream filter()首先过滤元素,然后再分组。被过滤的值被丢弃无法被追溯跟踪。如果需要跟踪需要先分组然后再过滤,这正是 Collectors.filtering能做的。

Collectors.filtering带函数参数用于过滤输入参数,然后收集过滤元素:

@Testpublic void givenList_whenSatifyPredicate_thenMapValueWithOccurences() {List numbers = List.of(1, 2, 3, 5, 5);Map result = numbers.stream() .filter(val -> val > 3) .collect(Collectors.groupingBy(i -> i, Collectors.counting()));assertEquals(1, result.size());result = numbers.stream() .collect(Collectors.groupingBy(i -> i,  Collectors.filtering(val -> val > 3, Collectors.counting())));assertEquals(4, result.size());}

Collectors.flatMapping方法

Collectors.flatMapping类似于Collectors.mapping 方法,但粒度更细。两者都带一个函数和一个收集器参数用于收集元素,但flatMapping函数接收元素流,然后通过收集器进行累积操作。首先我们看模型类:

class Blog {private String authorName;private List comments = new ArrayList<>();public Blog(String authorName, String ... comment){  this.authorName = authorName;  comments.addAll(Arrays.asList(comment));}public String getAuthorName(){  return this.authorName;}public List getComments(){  return comments;}}

Collectors.flatMapping 方法跳过中间集合,直接写至单个有Collectors.groupingBy定义的组映射容器中:

@Testpublic void givenListOfBlogs_whenAuthorName_thenMapAuthorWithComments() {Blog blog1 = new Blog("1", "Nice", "Very Nice");Blog blog2 = new Blog("2", "Disappointing", "Ok", "Could be better");List blogs = List.of(blog1, blog2);   Map>> authorComments1 = blogs.stream() .collect(Collectors.groupingBy(Blog::getAuthorName,   Collectors.mapping(Blog::getComments, Collectors.toList())));  assertEquals(2, authorComments1.size());assertEquals(2, authorComments1.get("1").get(0).size());assertEquals(3, authorComments1.get("2").get(0).size());Map> authorComments2 = blogs.stream() .collect(Collectors.groupingBy(Blog::getAuthorName,   Collectors.flatMapping(blog -> blog.getComments().stream(),   Collectors.toList())));assertEquals(2, authorComments2.size());assertEquals(2, authorComments2.get("1").size());assertEquals(3, authorComments2.get("2").size());}

Collectors.mapping映射所有分组(作者的评论)值收集的器容器中,如List。并且删除中间集合,直接存储集合至收集器的容器。

关于"Java9 Stream Collectors新增的功能怎么用"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Java9 Stream Collectors新增的功能怎么用"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

方法 元素 功能 容器 函数 参数 知识 收集器 分组 输入 内容 篇文章 跟踪 不同 两个 价值 作者 单个 场景 操作简单 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南服务器维修调试云空间 外部网络怎么连接服务器啊 启程科技互联网公司 华为安卓手机的数据库是什么 福州网络安全峰会 反诈小故事网络安全在行动 华为网络安全一级违规行为 kys电影快捷指令未连接服务器 登录ipad连接服务器错误 网络安全知识竞赛怎么查看成绩 ps4 pro数据库 电脑主机做服务器 11月17日网络安全问题 中控消费软件配置数据库 数据库应用系统技术刘晓强答案 数据库非法字符有哪些 quickrms 数据库 建设大楼的计算机属于软件开发吗 什么叫电信托管服务器 静安区创新软件开发要多少钱 阿里云数据库如何单表恢复 telnet 服务器 打开 连云港网络服务器机柜直接供货 游戏软件开发的指导 软件开发类产品的商业策划书 什么是网络安全5w1h 大学生规划书网络技术 什么是软件开发系统化 云服务器崩溃了 数据库将学号属性设置为外键
0