collector list 多个分组_Java 8嵌套(多级)分组依据
您不能通过多个键对单个项目进行分组,除非您接受该项目可能会出现在多个组中。在这种情况下,您想要执行一种flatMap操作。
实现此目的的一种方法是Stream.flatMap与临时对一起使用,以容纳和的组合,Item然后SubItem再进行收集。由于不存在标准对类型,因此典型的解决方案是Map.Entry:
Map>> result = pojo.getItems().stream()
.flatMap(item -> item.subItems.stream()
.map(sub -> new AbstractMap.SimpleImmutableEntry<>(item, sub)))
.collect(Collectors.groupingBy(e -> e.getKey().getKey1(),
Collectors.mapping(Map.Entry::getValue,
Collectors.groupingBy(SubItem::getKey2))));
不需要这些临时对象的替代方法是flatMap直接在收集器中执行操作,但是不幸的flatMapping是,直到Java 9才存在。
这样,解决方案看起来像
Map>> result = pojo.getItems().stream()
.collect(Collectors.groupingBy(Item::getKey1,
Collectors.flatMapping(item -> item.getSubItems().stream(),
Collectors.groupingBy(SubItem::getKey2))));
如果我们不想等待Java 9,可以在代码库中添加一个类似的收集器,因为实现起来并不难:
static Collector flatMapping(
Function super T,? extends Stream extends U>> mapper,
Collector super U,A,R> downstream) {
BiConsumer acc = downstream.accumulator();
return Collector.of(downstream.supplier(),
(a, t) -> { try(Stream extends U> s=mapper.apply(t)) {
if(s!=null) s.forEachOrdered(u -> acc.accept(a, u));
}},
downstream.combiner(), downstream.finisher(),
downstream.characteristics().toArray(new Collector.Characteristics[0]));
}
collector list 多个分组_Java 8嵌套(多级)分组依据相关推荐
- java对list分组_Java List排序,分组等操作
假定有一列实体类对像 List list = UserServer.getList(); 去重,去除重复对象(每个属性的值都一样的),需要注意的是要先重写对象User的equals和hashCode方 ...
- java 集合分组_java List 如何进行分组
第四步:双字段分组. 1.此处依然使用了jdk1.8的新特性(转set时),也可以自己写两个for循环替代. 2.实体类使用的还是Student 3.设计思路就是先将要分组的两个字段分别转为set集合 ...
- 教你玩转CSS 分组选择器和嵌套选择器
目录 分组选择器 嵌套选择器 分组选择器 在样式表中有很多具有相同样式的元素. h1 {color:green;}h2 {color:green;}p {color:green;} 为了尽量减少代码, ...
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结...
为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述. 1.在查询结果中显示列名: a.用as关键字:select name as '姓名' ...
- [冷枫推荐]:数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。...
为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述. 1.在查询结果中显示列名: a.用as关键字:select name as '姓名' ...
- java 下拉列表 可折叠 qq分组_Java在Excel中创建多级分组、折叠或展开分组的实现...
本文介绍通过Java程序在Excel创建分组的方法,可对行或列分组进行分组并设置明细数据是否展开或折叠.设置数据分组并展开或折叠时,可通过以下方法: 方法一: 通过方法sheet.groupByRow ...
- java 下拉列表 可折叠 qq分组_Java 在Excel中创建多级分组、折叠或展开分组
以下经验内容分享通过Java程序在Excel中创建多级分组.折叠或展开分组. 可对行或列分组进行分组并设置明细数据是否展开或折叠.设置数据分组并展开或折叠时,可通过以下方法: 方法一: 通过方法she ...
- java excel 展开折叠_Java在Excel中创建多级分组、折叠或展开分组的实现
本文介绍通过java程序在excel创建分组的方法,可对行或列分组进行分组并设置明细数据是否展开或折叠.设置数据分组并展开或折叠时,可通过以下方法: 方法一: 通过方法sheet.groupbyrow ...
- 使用多级分组报表展现分类数据
使用多级分组报表展现分类数据 当你走进便利店,你会发现所有的商品都是按类排放的,分类排放可以帮助您快速找到同类商品,也可以快速发现你想要的商品. 当去饭店吃饭的时候,菜单上的菜也是按类别排列的,比如凉 ...
最新文章
- Ubuntu 16.04 安装arm-linux-gcc交叉编译
- 从无到有算法养成篇-栈和队列·栈
- mysql补充(1)校对集utf8_unicode_ci与utf8_general_ci
- 2013\Province_C_C++_A\4.颠倒的价牌
- php监听网页日志,如何用php程序监听一个不断增长的日志文件
- cnn卷积神经网络应用_卷积神经网络(CNN):应用的核心概念
- 神经网络激活函数=生物转换器?
- 招聘| 基因组所Yuwen Liu团队诚聘科研人员
- AndroidStudio_安卓原生开发_Android中使用HttpURLConnection发送同步Post请求_json数据到springBoot后台---Android原生开发工作笔记139
- php循环 跳转语句,golang循环跳转语句
- mvc5 源码解析2-2 mvchandler的执行
- 查看和修改mysql最大连接数
- ThinkBook 14P Win11网卡驱动掉了-解决方案
- 区块链开发(四)区块链技术详解PPT
- HTML,CSS中的复合写法总结
- 关于百分位数(percentile)
- 把汉字转换成拼音的util
- python mac可以运行win不能运行_Pymssql程序可以在mac上运行,但不能在windows上运行...
- 计算机语言 机器码,什么是机器码 机器码封了怎么解决-与非网
- 周志华机器学习笔记(一)
热门文章
- HDU 1033 水题
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-通过SQL实现特殊业务...
- 图像处理理论-颜色模式
- Java的加载与执行
- python调用c++的库传递二级指针
- linux语言 翻译工具,Linux文本转语音工具eSpeak介绍
- 4怎么修边_亦木良品阻燃板怎么样
- python交叉验证函数_python – 在sklearn中使用交叉验证和AUC-ROC作为逻辑回归模型...
- vue function (i)第一次点击不执行_vue下$nextTick及原理浅析
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 11丨产品销售分析 III【难度中等】