Collectors类作用:
一、Collectors类:
1.1、Collectors介绍
Collectors类,是JDK1.8开始提供的一个的工具类,它专门用于对Stream操作流中的元素各种处理操作,Collectors类中提供了一些常用的方法,例如:toList()、toSet()、toCollection()、toMap()、toConcurrentMap()方法,以及一些分组聚合的方法。
Stream操作流
1.2、常用方法
注意:Collectors类中的方法都是需要和Stream类中的collect()方法结合使用的。
(1)toList、toSet方法
toList、toSet方法是将Stream流中的数据,提取出来,转换成集合返回。
public static List<User> getUserList() {List<User> list = new ArrayList<>();for (int i = 0; i < 10; i++) {list.add(new User(i+11, "name_00" + i, "test_0" + i));}return list;
}
public static void main(String[] args) {List<User> userList = getUserList();// 转换 List 集合List<String> list = userList.stream().map(User::getUname).collect(Collectors.toList());System.out.println(list);// 转换 Set 集合Set<String> list2 = userList.stream().map(User::getPassword).collect(Collectors.toSet());System.out.println(list2);
}
(2)toMap方法
toMap、toConcurrentMap两个方法的作用是一样的,只不过toConcurrentMap方法是线程安全的。这两个方法在使用的时候,至少需要传递两个参数,分别是:
- 第一个参数:Function类型的参数,作为keyMapper,这是用于指定Map中的key的(必须传递)。
- 第二个参数:Function类型的参数,作为valuesMapper,这是用于指定Map中的value的(必须传递)。
- 第三个参数:BinaryOperator类型的参数,这是用于当Map集合中的key重复的时候,执行的解决办法(可选,只有当key重复时候,才会执行这个操作)。
public static void main(String[] args) {List<User> userList = getUserList();// 转换为map集合Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, item -> item, (x, y) -> {if (Objects.equals(x.getId(), y.getId())) {System.out.println("key发生重复啦");return x;}return y;}));System.out.println(userMap);
}
(3)joining方法
joining方法的作用就是将Stream流中的元素按照指定的格式拼接起来,该方法有哪个重载类型,分别如下所示:
- 第一个方法:joining()无参数方法,直接将所有元素拼接起来。
- 第二个方法:joining(delimiter)一个参数方法,按照指定的分隔符delimiter拼接元素。
- 第三个方法:joining(delimiter,prefix,suffix)三个参数方法,按照指定的分隔符delimiter拼接元素,并且在最终拼接结果的前后指定prefix前缀和suffix后缀。
public static void main(String[] args) {List<User> userList = getUserList();// joining 连接String join1 = userList.stream().map(User::getUname).collect(Collectors.joining());String join2 = userList.stream().map(User::getUname).collect(Collectors.joining(","));String join3 = userList.stream().map(User::getUname).collect(Collectors.joining(",", "[", "]"));System.out.println(join1);System.out.println(join2);System.out.println(join3);
}
(4)counting方法
counting方法用于统计元素个数,一般不会单独使用,会和groupingBy结合使用。
// counting 统计
Long count = userList.stream().collect(Collectors.counting());
System.out.println(count);
(5)groupingBy方法
groupingBy方法用于将Stream流中的元素,按照某个分组规则将其分组。groupingBy方法返回值是一个Map集合,集合中的key表示分组的唯一标识,value则表示分组后的所有元素,默认是List集合。
groupingBy方法有多个参数的重载,如下所示:
- 一个参数的方法:groupingBy(Function key),接收一个Function类型的参数,主要是作为Map集合中的key,默认是返回List集合作为value。
- 两个参数的方法:groupingBy(Function key,Collector downstream),key是Map的key值,第二个则表示一个收集器,对分组中的所有元素进行收集,然后作为Map对象的value。(*groupingBy可以实现多个字段分组,也就是先按照某个字段分组之后,在对组内的集合按照某个字段继续分组*)

案例代码如下:
public static void main(String[] args) {List<User> userList = new ArrayList<>();userList.add(new User(1001, "java", "123"));userList.add(new User(1002, "html", "123"));userList.add(new User(1003, "css", "123"));userList.add(new User(1004, "js", "123"));userList.add(new User(1005, "java", "123"));userList.add(new User(1006, "css", "123"));// 按照 name 分组Map<String, List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getUname));System.out.println(map);// 按照 name 分组,并且计算每一组中 id 平均值Map<String, Double> map1 = userList.stream().collect(Collectors.groupingBy(User::getUname, Collectors.averagingDouble(User::getId)));System.out.println(map1);
}
(6)partitioningBy方法
partitioningBy方法是分区的,它是一种特殊的分组groupingBy,前面介绍了groupingBy是将数组按照某个key分组成多个集合,最终得到一个Map<key,List>结果。
而这里的partitioningBy意味分区,它是将数据分为两组,一组是满足条件的分区,另外一组则是不满足条件的分组,最终返回的结果是一个Map<boolean,List>的结果格式,其中boolean只有两个值:true和false。
public static void main(String[] args) {// 分区Integer[] nums = new Integer[] { 1, 2, 3, 4, 5 };// 将大于 3 的作为一组Map<Boolean, List<Integer>> map = Arrays.stream(nums).collect(Collectors.partitioningBy(item -> item > 3));System.out.println(map);
}
运行结果如下所示:

相关文章:
Collectors类作用:
一、Collectors类: 1.1、Collectors介绍 Collectors类,是JDK1.8开始提供的一个的工具类,它专门用于对Stream操作流中的元素各种处理操作,Collectors类中提供了一些常用的方法,例如:toList()、toSet()、to…...
LASSO回归
LASSO回归 LASSO(Least Absolute Shrinkage and Selection Operator,最小绝对值收敛和选择算子算法)是一种回归分析技术,用于变量选择和正则化。它由Robert Tibshirani于1996年提出,作为传统最小二乘回归方法的替代品。 损失函数 1.线性回…...
机器学习中的 K-均值聚类算法及其优缺点。
K-均值聚类算法是一种常见的无监督学习算法,它可以将数据集分成 K 个簇,每个簇内部的数据点尽可能相似,而不同簇之间的数据点应尽可能不同。下面详细讲解 K-均值聚类算法的优缺点: 优点: 简单易用:K-均值…...
云计算与虚拟化
一、概念 什么是云计算? 云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果…...
Linux常见进程类别
目录 常见进程类别 守护进程&精灵进程 任务管理 进程组 作业 作业 | 进程组 会话 w命令 守护进程 守护进程的创建 setsid()函数 daemon()函数 模拟实现daemon函数 前台进程 | 后台进程 僵尸进程 | 孤儿进程 僵尸进程的一些细节 守护进程 | 后台进程 守护…...
智能小车之蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车
目录 1. 蓝牙控制小车 2. 蓝牙控制并测速小车 3. wifi控制测速小车 4. 4g控制小车 5. 语音控制小车 1. 蓝牙控制小车 使用蓝牙模块,串口透传蓝牙模块,又叫做蓝牙串口模块 串口透传技术: 透传即透明传送,是指在数据的传输过…...
指针进阶(一)
指针进阶 1. 字符指针面试题 2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名 3.3 数组指针的使用4. 数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 前言 指针的主题,我们在初级阶段的《指针》章节已经接…...
c# sql 判断表中是否包含指定字段
你可以使用以下方法来判断一个 SQL 数据库中的表是否包含指定的字段。 首先,你需要连接到数据库,然后执行一条 SQL 查询语句来检查表结构。你可以使用 SELECT 语句和 INFORMATION_SCHEMA.COLUMNS 系统视图来获取表中的所有列信息。 下面是一个示例代码…...
08-JVM垃圾收集器详解
上一篇:07-垃圾收集算法详解 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没…...
sql_mode详解
文章目录 一、sql_mode作用二、查询sql_mode三、mysql8默认的mode配置(6个默认配置)四、常见mode详细解释mysql8默认配置了的mode(6个)需要自己配置的mode(4个) 五、设置sql_mode(一旦设置了&am…...
Vue3的新特性总结
一、Vue3 里 script 的三种写法 首先,Vue3 新增了一个叫做组合式 api 的东西,英文名叫 Composition API。因此 Vue3 的 script 现在支持三种写法。 1、最基本的 Vue2 写法 <template><div>{{ count }}</div><button click"…...
【Node】Mac多版本Node切换
1、查看当前电脑是否安装node node -v或者查看当前电脑通过brew安装的node路径 ls /usr/local/Cellar/node*2、查看可安装的node brew search node3、安装其他版本node 下载需要安装的node版本 brew install node144、brew切换node版本 假设之前的版本是18,需…...
Apache POI
POI介绍 Apache POI是用Java编写的免费开源的跨平台的Java API, Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能, 其中使用最多的就是使用POI操作Excel文件。 maven坐标: <dependency><groupId>org.apa…...
个人能做股票期权吗?个人期权交易开户条件新规
个人投资者是可以交易股票期权的,不过期权交易通常需要投资者具备一定的投资经验和风险承受能力,因为期权交易涉及较高的风险和复杂性,下文为大家介绍个人能做股票期权吗?个人期权交易开户条件新规的内容。本文来自:期…...
Java面试整理(一)
开篇 面试,应该都是打工人需要面对的事情。我记得自己以前开始准备Java工程师面试时,都会去看那个《面试宝典》,当时这个“宝典”真的很经典,现在应该还是不少朋友会看这个。我自己经历过了找工作的面试,和企业招聘工作。所以我自己更加想从这两个不同的角度去和大家交流这…...
国家信息中心举办“数字政府建设暨数字安全技术”研讨会:海云安提出数字政府软件供应链安全解决方案
近日,由国家信息中心主办,复旦大学研究院承办的“数字政府建设暨数字安全技术研讨会”在义乌顺利召开。国家信息中心信息与网络安全部副主任禄凯,复旦大学党委常委、宣传部部长陈玉刚,义乌市委常委、常务副市长喻新贵为会议致辞。…...
uniapp 处理 分页请求
我的需求是手机上一个动态滚动列表,下拉到底部时,触发分页数据请求 uniapp上处理分页解决方案 主要看你是如何写出滚动条的。我想到的目前有三种 (1)页面滚动:直接使用onReachBottom方法,可以监听到达底部…...
最新2米分辨率北极开源DEM数据集(矢量文件)
一、项目背景 美国明尼苏达大学(University of Minnesota)的极地地理空间中心(Polar Geospatial Center, PGC)于2023年8月发布了北极数字高程模型4.1版本(ArcticDEM Mosaic 4.1)。该DEM数据集是革命性的,分辨率达到了2米,而一般的开源DEM数据集分辨率是3…...
【计算机网络】HTTP(下)
本文承接上文的代码进行改造,上文链接:HTTP上 文章目录 1. 实现网站跳转实现 自己的网站跳转 2. 请求方法(get) && 响应方法(post)GET方法POST方法GET与POST的应用场景 3. HTTP状态码在自己设计的代码中发现4043开头的状态码(重定向状态码)永久…...
自学Python03-学会Python中的while循环语句
我们来学习一下怎么使用列表和字典吧! 1.列表 首先,我们来学习一下列表。列表是一个有序的集合,它可以包含任何类型的数据,比如数字、字符串或其他列表。我们可以用方括号 [] 来创建一个列表,用逗号分隔各个元素。 …...
doris 根据文件夹id,一条sql语句获取到它本身及所有子文件、孙文件
取决于 Apache Doris 的版本。Apache Doris 是基于 MySQL 协议开发的 MPP 架构 OLAP 数据库。它的 SQL 兼容性在近年来提升很快,但递归查询的支持情况如下:1. 核心结论Doris 2.0 及以上版本: 支持。可以使用 WITH RECURSIVE 语法(…...
星图AI平台教程:手把手教你训练PETRV2-BEV模型
星图AI平台教程:手把手教你训练PETRV2-BEV模型 1. 认识PETRV2-BEV模型 BEV(Birds Eye View)感知是自动驾驶领域的核心技术之一,它能让车辆像鸟一样从空中俯瞰道路环境。PETRV2是当前最先进的BEV感知模型之一,相比传统…...
中国香港中文大学深圳分校全球首创视频广告植入新技术
这项由中国香港中文大学深圳分校、深圳环大湾区研究院、纽约州立大学布法罗分校以及哈尔滨工业大学联合完成的研究,于2026年3月发表在计算机视觉领域的顶级学术会议上,论文编号为arXiv:2603.02816v1。研究团队开发了一个名为"BrandFusion"的多…...
Qwen3.5-27B开源生态整合:LangChain适配与多模态RAG构建教程
Qwen3.5-27B开源生态整合:LangChain适配与多模态RAG构建教程 1. 引言:Qwen3.5-27B模型概述 Qwen3.5-27B是当前开源社区中颇具影响力的多模态大语言模型,它不仅具备强大的文本理解和生成能力,还能处理图像内容。本教程将带您从零…...
C#与Sql Server 2008 R2图书信息管理系统源码解析:基于VS2015与.NET...
C#与Sql server 2008 R2图书信息管理系统,源码带注释,VS2015版本,.net4.5框架最近在整理硬盘翻出个古董项目——基于C#和SQL Server 2008 R2的图书管理系统。虽然技术栈有点年头,但架构设计现在看依然有参考价值。随手打开尘封的V…...
从实战到绕过:CRLF注入与WAF的攻防博弈
1. CRLF注入漏洞的本质与危害 第一次遇到CRLF注入漏洞时,我盯着BurpSuite的响应包看了足足十分钟。那是在一次常规渗透测试中,目标网站的URL参数竟然原封不动地出现在了HTTP响应头里。这种看似简单的漏洞,背后却藏着惊人的破坏力。 CRLF这两个…...
别再让慢查询拖垮你的报表了!用StarRocks物化视图5分钟搞定实时聚合加速
5分钟极速优化:用StarRocks物化视图拯救你的慢查询报表 凌晨三点的办公室,咖啡杯已经见底,而你的聚合查询还在转圈——这是多少数据工程师的噩梦。当千万级交易数据遇上实时决策需求,传统方法往往力不从心。今天我们要解锁的StarR…...
别再踩坑了!Vue中使用postMessage传值的5个注意事项(含window.opener最佳实践)
Vue项目中postMessage通信的深度实践指南 跨窗口通信一直是前端开发中的难点,尤其在Vue这类现代框架中,如何安全高效地使用postMessage进行数据传递,是每个开发者都需要掌握的技能。本文将深入探讨postMessage在Vue项目中的实际应用场景&…...
API认证机制深度剖析:从漏洞诊断到安全架构的演进之路
API认证机制深度剖析:从漏洞诊断到安全架构的演进之路 【免费下载链接】public-api-lists A collective list of free APIs for use in software and web development 🚀 (Clone of https://github.com/public-apis/public-apis) 项目地址: https://gi…...
【手把手】TEC制冷片从入门到放床底:珀尔帖效应原理、选型与散热避坑指南
文章目录第一章 先别急着买:TEC到底是什么“神仙”元件?1.1 珀尔帖效应:为什么N/P半导体碰一起就会“搬运”热量?1.2 结构拆解:几十对“电偶”是如何叠成一块小方片的?1.3 一条线分清冷热端:别再…...
