javaio流层次结构_流的多层次分组

javaio流层次结构

1.简介

使用Java 8流,可以很容易地根据不同的标准对对象集合进行分组。 在这篇文章中,我们将看到如何从简单的单级分组到更复杂的,涉及多个级分组的分组。

我们将使用两个类来表示我们要分组的对象:人和宠物。

人类

public class Person {private final String name;private final String country;private final String city;private final Pet pet;public Person(String name, String country, String city, Pet pet) {this.name = name;this.country = country;this.city = city;this.pet = pet;}public String getName() {return name;}public String getCountry() {return country;}public String getCity() {return city;}public Pet getPet() {return pet;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", country='" + country + '\'' +", city='" + city + '\'' +'}';}
}

宠物课

public class Pet {private final String name;private final int age;public Pet(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic String toString() {return "Pet{" +"name='" + name + '\'' +", age=" + age +'}';}
}

在主要方法中,我们创建将在以下各节中使用的集合。

public static void main(String[] args) {Person person1 = new Person("John", "USA", "NYC", new Pet("Max", 5));Person person2 = new Person("Steve", "UK", "London", new Pet("Lucy", 8));Person person3 = new Person("Anna", "USA", "NYC", new Pet("Buddy", 12));Person person4 = new Person("Mike", "USA", "Chicago", new Pet("Duke", 10));List<Person> persons = Arrays.asList(person1, person2, person3, person4);
  • 您可以在此处查看源代码。

2.单层分组

分组的最简单形式是单级分组。 在此示例中,我们将按其国家/地区对集合中的所有人员进行分组:

public void singleLevelGrouping(List<Person> persons) {final Map<String, List<Person>> personsByCountry = persons.stream().collect(groupingBy(Person::getCountry));System.out.println("Persons in USA: " + personsByCountry.get("USA"));
}

如果我们看一下地图,就可以看到每个国家如何包含其公民列表:

单组

结果显示居住在指定国家/地区的人:

Persons in USA: [Person{name='John', country='USA', city='New York'}, Person{name='Anna', country='USA', city='New York'}, Person{name='Mike', country='USA', city='Chicago'}]

3.两级分组

在此示例中,我们将不仅按国家/地区分组,还按城市分组。 为此,我们需要实现两级分组。 我们将按国家对人员进行分组,对于每个国家,我们将按其居住城市对人员进行分组。

为了允许进行多级分组,类Collectors中的groupingBy方法支持附加的Collector作为第二个参数:

public static <T, K, A, D>Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> classifier,Collector<? super T, A, D> downstream)

让我们使用此方法来实现我们的两级分组:

public void twoLevelGrouping(List<Person> persons) {final Map<String, Map<String, List<Person>>> personsByCountryAndCity = persons.stream().collect(groupingBy(Person::getCountry,groupingBy(Person::getCity)));System.out.println("Persons living in London: " + personsByCountryAndCity.get("UK").get("London").size());
}

如果我们调试执行,我们将看到人员的分布情况:

twoLevelGrouping

4.三级分组

在最后一个示例中,我们将更进一步,并按国家,城市和宠物名称对人进行分组。 我将其分为两种方法以提高可读性:

public void threeLevelGrouping(List<Person> persons) {final Map<String, Map<String, Map<String, List<Person>>>> personsByCountryCityAndPetName = persons.stream().collect(groupingBy(Person::getCountry,groupByCityAndPetName()));System.out.println("Persons whose pet is named 'Max' and live in NY: " +personsByCountryCityAndPetName.get("USA").get("NYC").get("Max").size());
}private Collector<Person, ?, Map<String, Map<String, List<Person>>>> groupByCityAndPetName() {return groupingBy(Person::getCity, groupingBy(p -> p.getPet().getName()));
}

现在,我们有了三个嵌套的地图,其中包含每个人员列表:

threeLevel分组

5.结论

Java 8 Collectors API为我们提供了一种对集合进行分组的简便方法。 通过嵌套收集器,我们可以添加不同的组层以实现多级分组。

翻译自: https://www.javacodegeeks.com/2016/03/multi-level-grouping-streams.html

javaio流层次结构

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

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

相关文章

大型程序是如何开发的_大型小程序如何研发提效

作者:王梦君微信公众号:滴滴顺风车技术出处:https://mp.weixin.qq.com/s/M1VArJ_ORY-eXSKzD6ysQw导读&#xff1a;自2016年小程序诞生以来&#xff0c;小程序以其“用完即走”的设计理念&#xff0c;以及简单易上手的开发模式&#xff0c;吸引了大批的小程序使用者以及开发者&a…

python数码时钟代码_Python+Pyqt实现简单GUI电子时钟

本文实例为大家分享了PythonPyqt实现简单GUI电子时钟的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面&#xff0c;利用pyqt模块也很方便&#xff0c;代码如下&#xff1a; from PyQt5.QtGui import * from PyQt5.QtCore im…

【WebRTC---入门篇】(八)WebRTC核心之RTP Medio 媒体控制与数据统计

RTCPeerConnection底层是通过RTP Medio实现的,处理真正数据传输,编码流量各种控制的实现。 Receiver 通过 getReceivers 可以获取一组RTCRtpReceiver对象,用于接收数据 Sender 通过getSenders 可以获取一组RTCRtpSender对象,用于发送数据,每个对象对应一个媒体轨 RTCR…

python语言中的单行注释语句_Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)...

#第一个注释 print ("Hello, Python!") #第二个注释 输出结果为&#xff1a;RESTART: E:/python/change.py Hello, Python! 多行注释可以用多个 # 号&#xff0c;还有 和 """&#xff1a;实例如下&#xff1a; #第一个注释#第二个注释 第三注释 第四…

【WebRTC---入门篇】(九)WebRTC网络基础:P2P/STUN/TURN/ICE

NAT 作用:内网地址转公网地址 STUN 作用:中介将公网信息彼此交换 TURN 作用:P2P不成功的话在云端架设服务器,双方进入同一房间。可以在一起进行数据交互 ICE 作用:打包以上取最优,先尝试P2P。如果P2P不通再选择TURN。ICE尝试所有可能性 Relay是TURN Server,大多数情况…

antlr4例子_ANTLR和网络:一个简单的例子

antlr4例子网络上的ANTLR&#xff1a;为什么&#xff1f; 我开始在MS-DOS上编写我的第一个程序。 因此&#xff0c;我非常习惯在自己的机器上安装工具。 但是在2016年&#xff0c;网络无处不在&#xff0c;因此那里也可能需要我们的语言。 可能的情况&#xff1a; ANTLR 也在…

【WebRTC---入门篇】(十)NAT

NAT主要用于内网穿透 NAT产生原因 NAT的种类 NAT穿越原理 完全锥型:内网主机先向外发送一个请求形成IP和port

maven java1.7_本周Java技巧#7 – Maven慢吗?

maven java1.7本周Java本周技巧是有关Maven的上一期的后续内容。 第一个视频介绍了与Maven依赖关系有关的方面。 该视频将介绍一些加快Maven构建速度的技术。 Maven慢吗&#xff1f; 从Maven 3开始&#xff0c;您可以并行运行构建。 根据构建机器和项目结构的不同&#xff0c;…

【WebRTC---入门篇】(十一)STUN协议

STUN作用:用于NAT穿越;它是典型的CS模式 RFC STUN规范 STUN header STUN Header格式

mysql数据迁移到sqlserver_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...

这是一个.net下操作数据库(结构数据库)的工具类&#xff0c;支持sqlserver、oracle、mysql、postgres、sqlite、access等常见数据库。注意&#xff1a;它并不是一个orm工具(常见的orm框架如&#xff1a;EF、Dapper等)。2.1 引入DBUtil依赖1. 首先打开vs(推荐vs2019)&#xff0c…

【H.264/AVC视频编解码技术】第二章【H264码流分析】

H264码流分层 NAL层,视频数据网络抽象层,作用是控制二进制数据的传输,主要用于网络传输。 VCL层,视频数据编码层。 VCL结构关系 NALU NAL Header (1B)+ RBSP H264码流中NALU sps pps IDR帧的理解 概念 什么是NALU? H264码流可以分为两层,VCL层和NAL层,NAL的全称…

android相册管理,Piktures - 最优雅的相册管理 - Android 应用 - 【最美应用】

多维度管理&#xff0c;美到每一个细节Piktures 的优雅&#xff0c;首先在于其浏览、管理的维度设计上。Android 原生相册最为人所诟病的就是其乱糟糟的浏览体验&#xff0c;所有带图片的文件夹都毫无章法地直接呈现。而 Piktures 则做了全面的改进。左滑即开打开文件夹管理模式…

【H264码流分析】 SPS/PPS/Slice Header

SPS中相关 H264 Profile 对视频压缩特性的描述&#xff0c;Profile越高&#xff0c;就说明采用了越高级的压缩特性 H264 Level Level是对视频的描述,Levrl越高&#xff0c;视频的码率&#xff0c;分辨率&#xff0c;fps越高 分辨率 帧相关 帧率计算 PPS Slice Header

access update语句执行_SQL Server与Access数据库sql语法十大差异

本文总结了SQL Server与Access数据库sql语法的十大差异。ACCESS结构简单容易处理&#xff0c;而且也能满足多数的应用程序要求&#xff0c;也是初学者的试牛刀。随着时间的推移&#xff0c;大多数数据库应用程序都会发展&#xff0c;变得更复杂&#xff0c;并且需要支持更多用户…

junit测试起名字规则_如何在JUnit 5中替换规则

junit测试起名字规则最近发布的JUnit 5&#xff08;又名JUnit Lambda&#xff09; alpha发行版引起了我的兴趣&#xff0c;在浏览文档时&#xff0c;我注意到规则以及运行程序和类规则都消失了。 根据文档&#xff0c;这些部分竞争的概念已被单个一致的扩展模型取代。 多年来&…

android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...

照片编辑免费软件app下载&#xff0c;提供给你全新的图片处理工具&#xff0c;这是软件包含了丰富的功能内容&#xff0c;软件一键即可轻松对各种照片組合、编辑和拼貼&#xff0c;那么有需要图片处理的用户下载该app使用吧&#xff01;【软件特色】【 拼图编辑&#xff1a;强大…

扩展 junit 框架_JUnit 5 –扩展模型

扩展 junit 框架我们已经对Java最普遍的测试框架的下一个版本了解很多。 现在&#xff0c;让我们看一下JUnit 5扩展模型&#xff0c;该模型将允许库和框架将自己的实现添加到JUnit中。 总览 建立 基本 建筑 扩展模型 条件 注射 … 在新兴的《 JUnit 5用户指南》中可以找…

【WebRTC---入门篇】(十二)WebRTC传输协议

浏览器协议栈(左图传统HTTP 右图WebRTC) RTP/SRTP RTP是未加密的数据,SRTP是加密后的数据。 RTP协议

springcloud官方文档_通俗易懂!Spring Cloud简介:官方文档翻译版

什么是微服务&#xff1f;"微服务架构是一种架构模式&#xff0c;它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间相互协调、互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务和服务之间采用轻量级的通信机制相互沟通…

【RTMP协议分析与抓包实测】

传输协议 RTMP基本通讯 RTMP基于TCP之上传输 TCP三次握手,相关文章链接&#xff0c;TCP三次握手流程 进行握手 c- --> s 发送c0c1 c ---> s 发送c2 s ---> c 发送s0s1s2 建立RTMP连接 真实建立连接的场景 c- --> s RTMP发送connect建立连接 s ---> c 协商(滑动…