当前位置: 首页 > news >正文

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类&#xff1a; 1.1、Collectors介绍 Collectors类&#xff0c;是JDK1.8开始提供的一个的工具类&#xff0c;它专门用于对Stream操作流中的元素各种处理操作&#xff0c;Collectors类中提供了一些常用的方法&#xff0c;例如&#xff1a;toList()、toSet()、to…...

LASSO回归

LASSO回归 LASSO(Least Absolute Shrinkage and Selection Operator&#xff0c;最小绝对值收敛和选择算子算法)是一种回归分析技术&#xff0c;用于变量选择和正则化。它由Robert Tibshirani于1996年提出&#xff0c;作为传统最小二乘回归方法的替代品。 损失函数 1.线性回…...

机器学习中的 K-均值聚类算法及其优缺点。

K-均值聚类算法是一种常见的无监督学习算法&#xff0c;它可以将数据集分成 K 个簇&#xff0c;每个簇内部的数据点尽可能相似&#xff0c;而不同簇之间的数据点应尽可能不同。下面详细讲解 K-均值聚类算法的优缺点&#xff1a; 优点&#xff1a; 简单易用&#xff1a;K-均值…...

云计算与虚拟化

一、概念 什么是云计算&#xff1f; 云计算&#xff08;cloud computing&#xff09;是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;通过多部服务器组成的系统进行处理和分析这些小程序得到结果…...

Linux常见进程类别

目录 常见进程类别 守护进程&精灵进程 任务管理 进程组 作业 作业 | 进程组 会话 w命令 守护进程 守护进程的创建 setsid()函数 daemon()函数 模拟实现daemon函数 前台进程 | 后台进程 僵尸进程 | 孤儿进程 僵尸进程的一些细节 守护进程 | 后台进程 守护…...

智能小车之蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车

目录 1. 蓝牙控制小车 2. 蓝牙控制并测速小车 3. wifi控制测速小车 4. 4g控制小车 5. 语音控制小车 1. 蓝牙控制小车 使用蓝牙模块&#xff0c;串口透传蓝牙模块&#xff0c;又叫做蓝牙串口模块 串口透传技术&#xff1a; 透传即透明传送&#xff0c;是指在数据的传输过…...

指针进阶(一)

指针进阶 1. 字符指针面试题 2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名 3.3 数组指针的使用4. 数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 前言 指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接…...

c# sql 判断表中是否包含指定字段

你可以使用以下方法来判断一个 SQL 数据库中的表是否包含指定的字段。 首先&#xff0c;你需要连接到数据库&#xff0c;然后执行一条 SQL 查询语句来检查表结构。你可以使用 SELECT 语句和 INFORMATION_SCHEMA.COLUMNS 系统视图来获取表中的所有列信息。 下面是一个示例代码…...

08-JVM垃圾收集器详解

上一篇&#xff1a;07-垃圾收集算法详解 如果说收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较&#xff0c;但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现&#xff0c;更加没…...

sql_mode详解

文章目录 一、sql_mode作用二、查询sql_mode三、mysql8默认的mode配置&#xff08;6个默认配置&#xff09;四、常见mode详细解释mysql8默认配置了的mode&#xff08;6个&#xff09;需要自己配置的mode&#xff08;4个&#xff09; 五、设置sql_mode&#xff08;一旦设置了&am…...

Vue3的新特性总结

一、Vue3 里 script 的三种写法 首先&#xff0c;Vue3 新增了一个叫做组合式 api 的东西&#xff0c;英文名叫 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&#xff0c;需…...

Apache POI

POI介绍 Apache POI是用Java编写的免费开源的跨平台的Java API&#xff0c; Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能&#xff0c; 其中使用最多的就是使用POI操作Excel文件。 maven坐标&#xff1a; <dependency><groupId>org.apa…...

个人能做股票期权吗?个人期权交易开户条件新规

个人投资者是可以交易股票期权的&#xff0c;不过期权交易通常需要投资者具备一定的投资经验和风险承受能力&#xff0c;因为期权交易涉及较高的风险和复杂性&#xff0c;下文为大家介绍个人能做股票期权吗&#xff1f;个人期权交易开户条件新规的内容。本文来自&#xff1a;期…...

Java面试整理(一)

开篇 面试,应该都是打工人需要面对的事情。我记得自己以前开始准备Java工程师面试时,都会去看那个《面试宝典》,当时这个“宝典”真的很经典,现在应该还是不少朋友会看这个。我自己经历过了找工作的面试,和企业招聘工作。所以我自己更加想从这两个不同的角度去和大家交流这…...

国家信息中心举办“数字政府建设暨数字安全技术”研讨会:海云安提出数字政府软件供应链安全解决方案

近日&#xff0c;由国家信息中心主办&#xff0c;复旦大学研究院承办的“数字政府建设暨数字安全技术研讨会”在义乌顺利召开。国家信息中心信息与网络安全部副主任禄凯&#xff0c;复旦大学党委常委、宣传部部长陈玉刚&#xff0c;义乌市委常委、常务副市长喻新贵为会议致辞。…...

uniapp 处理 分页请求

我的需求是手机上一个动态滚动列表&#xff0c;下拉到底部时&#xff0c;触发分页数据请求 uniapp上处理分页解决方案 主要看你是如何写出滚动条的。我想到的目前有三种 &#xff08;1&#xff09;页面滚动&#xff1a;直接使用onReachBottom方法&#xff0c;可以监听到达底部…...

最新2米分辨率北极开源DEM数据集(矢量文件)

一、项目背景 美国明尼苏达大学(University of Minnesota)的极地地理空间中心(Polar Geospatial Center, PGC)于2023年8月发布了北极数字高程模型4.1版本(ArcticDEM Mosaic 4.1)。该DEM数据集是革命性的&#xff0c;分辨率达到了2米&#xff0c;而一般的开源DEM数据集分辨率是3…...

【计算机网络】HTTP(下)

本文承接上文的代码进行改造&#xff0c;上文链接&#xff1a;HTTP上 文章目录 1. 实现网站跳转实现 自己的网站跳转 2. 请求方法(get) && 响应方法(post)GET方法POST方法GET与POST的应用场景 3. HTTP状态码在自己设计的代码中发现4043开头的状态码(重定向状态码)永久…...

自学Python03-学会Python中的while循环语句

我们来学习一下怎么使用列表和字典吧&#xff01; 1.列表 首先&#xff0c;我们来学习一下列表。列表是一个有序的集合&#xff0c;它可以包含任何类型的数据&#xff0c;比如数字、字符串或其他列表。我们可以用方括号 [] 来创建一个列表&#xff0c;用逗号分隔各个元素。 …...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...