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]));

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlserver 还原bak文件 查看不到_SQL server中用T-SQL语句实现(建库,分离,附加,备份,还原)...

会用图形界面创建后&#xff0c;今天可以学习用T-SQL来创建数据库及对数据库的操作。一. T-SQL 创建数据库--创建数据库create database MySchool--创建数据库 数据库名称MySchoolon primary(--创建主数据库文件nameMySchool_data,--主数据库文件名称fileNameD:MySchool_data.m…

win7变成linux桌面背景,教大家把Ubuntu界面改造成Windows7系统

经常使用windows7系统的用户可能比较喜欢windows7系统强大的系统界面&#xff0c;下面就教大家如何使Ubuntu看起来像Windows 7系统的界面&#xff0c;具体内容如下所述&#xff0c;Ubuntu自身拥有相当不错的主题系统、视觉效果和养眼的画面&#xff0c;但你可能喜欢windows7的A…

深交所a股证券代码_深市和沪市的股票代码应该怎么区别?

展开全部深市和沪市的股票代码的区别如下&#xff1a;1、沪市A股票买卖的代32313133353236313431303231363533e78988e69d8331333365666266码是以600或601打头&#xff0c;如&#xff1a;运盛实业&#xff0c;股票代码是600767&#xff0c;中国国航(7.72,0.32,4.32%)是601111。B…

怎么通过MQTT查看数据是否上云端_设备工程师们的福利来啦!JSON数据采集网关帮你实现云端对接~...

JSON数据采集网关是一种能够将各种传感器的数据采集后按照JSON格式上传服务器的网关。图 JSON数据采集网关工作原理示意图JSON(JavaScript Object Notation)是java中的数据格式。例如{“power”:”100”, “time”:”10:12:23”}这样的格式&#xff0c;由于它简单易用&#xff…

小爱音响调用php接口_PHP调用语音合成接口

百度TTS 语音合成//百度文件转换成语音private function toSpeech($text){define(DEMO_CURL_VERBOSE, false);$obj["status">0,"msg">"","file_name">""];//获取秘钥$apiKey Config::get(apiKey);$secretKey Con…

oracle 会话数上不去_Oracle初识

1、基本概念oracle数据库是一个物理概念&#xff0c;oracle实例是数据库在内存中的镜像&#xff0c;属于一种逻辑概念。oracle数据库与oracle实例至少是一对一的关系&#xff0c;也可能是一对多关系&#xff08;oracle集群&#xff1a;RAC real application cluster&#xff09…

trace Linux and实例,traceroute在linux中的使用方法

traceroute在linux中的使用方法一、traceroute的实现原理1、IP协议利用存活时间TTL来发出探测包跟踪数据包到达目标ip主机所经历的路由网关数量&#xff0c;每经过一个路由器&#xff0c;TTL的值就减去1。当TTL值为0时&#xff0c;主机就取消发送数据包&#xff0c;并回传一份I…

js 点击闭包_学习Javascript闭包(Closure)

讲的很清楚明了&#xff0c;连我都懂了&#xff0c;要是我们大学时的老师也能这么讲课。。。他们只会放幻灯片2009年8月30日 22:29| #| 引用2009年8月30日 22:44| #| 引用呵呵&#xff0c;可以作为面试题了&#xff01;2009年8月31日 09:30| #| 引用十三说&#xff1a;闭包个人…

在VS中怎么用vb画矩形_(十四)矩形和操作展示逻辑操作

时间为友&#xff0c;记录点滴。聊了这么多的图片运算&#xff0c;忽然有个想法&#xff0c;为什么非要用静态的图片来展示运算呢&#xff1f;我们可以用自己做的图片来经过运算后显示出来。说干就干。先想一下需求&#xff1a;整体环境非黑即白。可以用鼠标在背景上画出矩形&a…

linux文件传输到另一台linux,使用scp将文件/目录拷贝到另一台Linux主机上

如何将一台Linux主机上的文件或目录拷贝到另一台Linux主机上&#xff0c;scp命令可以实现该需求前提条件&#xff1a;两台Linux主机处于同一网段&#xff0c;可以互相ping通操作如下&#xff1a;文件拷贝①将本地文件拷贝到远端主机上scp 待拷贝的文件 远端主机用户名远端主机I…

python结构化数据_python新手入门必备—— 使用json保存结构化数据

【摘要】使用 json 保存结构化数据时&#xff0c;字符串可以很轻松地写入文件并从文件中读取出来。数字可能会费点劲&#xff0c;因为 read() 方法只能返回字符串&#xff0c;这些字符串必须传递给类似 int() 的函数&#xff0c;它会接受类似 123 这样的字符串并返回其数字值 1…

c++ 二维数组 排序_漫画:“排序算法” 大总结

​冒泡排序&#xff1a;漫画&#xff1a;什么是冒泡排序&#xff1f;​mp.weixin.qq.com选择排序&#xff1a;漫画&#xff1a;什么是选择排序&#xff1f;​mp.weixin.qq.com插入排序&#xff1a;漫画&#xff1a;什么是插入排序&#xff1f;​mp.weixin.qq.com此外还有冒泡排…

c语言线程经常段错误的是,由pthread_create引起的段异常

由pthread_create引起的段错误一般线程的结束是由进程内的其他线程来结束的&#xff0c;调用pthread_cancel.但是需要考虑到被结束线程的性质&#xff0c;一方面&#xff0c;线程是可被结束&#xff0c;也可无法结束&#xff0c;即不响应该信号&#xff1b;另一方面&#xff0c…

python request url编码_Python 爬虫 (requests) 发送中文编码的 HTTP POST 请求

向往常一样发送POST请求出现错误网站信息表单页面结果网页使用 gb2312 编码使用 requests 发送 post 请求In [2]: import requestsIn [3]: from bs4 import BeautifulSoup as BSIn [4]: url http://example.com/ip/search.aspIn [5]: data {...: loudong: 女生九栋,...: fang…

python坐标定位_如何利用Python识别并定位图片中某一个色块的坐标?

依赖python包|opencv、numpy、aircv 第一步&#xff1a;查找图片在原始图片上的坐标点 import aircv as ac def matchImg(imgsrc,imgobj,confidencevalue0.5):#imgsrc原始图像&#xff0c;imgobj待查找的图片 imsrc ac.imread(imgsrc) imobj ac.imread(imgobj) match_result …

centos7打开图形界面命令_centos7标准版(DVD)命令界面和图形界面相互切换

1、root登陆终端2、输入命令 vi /etc/inittab ,查看两种界面的启动模式&#xff1a;vi /etc/inittab3、退出vi模式&#xff0c;&#xff0c;输入命令systemctl get-default 查看当前系统启动模式&#xff1b;我的是命令界面模式为&#xff1a;multi-user.target&#xff1b;4、…

为什么编程语言要从c语言学起,在那么多编程语言中,为什么推荐初学者学 C 语言?...

如果你学过了计蒜客的《编程初学入门常识》的课&#xff0c;你就会知道&#xff0c;一个汇编写的操作系统&#xff0c;是没有办法在不同的计算机上普适使用的。所以呢&#xff0c;Ken 和 Dennis 为了让更多人在非 PDP-7 小型机的计算机上也玩上《星际旅行》的游戏&#xff0c;决…

ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...

本文是“Java秒杀系统实战系列文章”的第十六篇&#xff0c;本文我们将继续秒杀系统的优化之路&#xff0c;采用统一协调调度中心中间件ZooKeeper控制秒杀系统中高并发多线程对于共享资源~代码块的并发访问所出现的并发安全问题&#xff0c;即用ZooKeeper实现一种分布式锁&…

curl shell 失败_linux – curl命令不在bash中通过shell脚本执行

我正在学习shell脚本&#xff01;同样我尝试在ubuntu终端上使用curl下载facebook页面.t.sh内容vivi-Dell-7537(Desktop) $cat t.shcurlCmd"curl \"https://www.facebook.com/vivekkumar27june88\""echo $curlCmd($curlCmd) > ~/Desktop/fb.html运行脚本…

centos配置c语言环境变量,CentOS7设置环境变量

一、环境变量的概念1、环境变量的含义程序(操作系统命令和应用程序)的执行都需要运行环境&#xff0c;这个环境是由多个环境变量组成的。2、环境变量的分类1)按生效的范围分类。系统环境变量&#xff1a;公共的&#xff0c;对全部的用户都生效。用户环境变量&#xff1a;用户私…