JDK8 stream toMap方法介绍

JDK8 List转Map方法,有下3种方法。


toMap(keyMapper, valueMapper);
toMap(keyMapper, valueMapper, BinaryOperator<U> mergeFunction);
toMap(keyMapper, valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier);

keyMapper:Key的映射函数
valueMapper:Value的映射函数
mergeFunction:当Key冲突时,调用的合并方法,对value进行处理。
mapSupplier:Map 构造器,在需要返回特定的Map时使用

第一个toMap方法

第一个toMap()方法返回Map,自然会需要key和value,所以2个参数是用来生成key和value的,下面案例如果key重复,会有报错


userList.stream().collect(Collectors.toMap(User::getId, t -> t));
userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

第二个toMap方法

第二个toMap()方法的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。第三个参数用在key值冲突的情况下:如果新元素产生的key在Map中已经出现过了,第三个参数就会定义解决的办法。

比如下面:

collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1, v2) -> v1));

第一个参数UserBo::getUserId 表示选择UserBo的getUserId作为map的key值;
第二个参数v -> v表示选择将原来的对象作为map的value值;
第三个参数(v1, v2) -> v1中,如果v1与v2的key值相同,选择v1作为那个key所对应的value值,注意是key所对应的value。

案例


List<String> strings = Arrays.asList("a", "b", "c", "a", "b");
// 使用toMap时,通过BinaryOperator函数处理重复键,注意BinaryOperator函数的2个参数是这个key对应的value
Map<String, Integer> map = strings.stream().collect(Collectors.toMap(str -> str,str -> 1,(existingValue, newValue) -> existingValue + newValue));//map  {a=2, b=2, c=1}

第三个toMap方法

重点说下第四个参数(mapSupplier)用于自定义返回Map类型,比如我们希望返回的Map是根据 Key 排序的,可以使用如下写法:


userList.stream().collect(Collectors.toMap(User::getId, User::getName, (n1, n2) -> n1, TreeMap::new));
userList.stream().collect(Collectors.toMap(User::getId, User::getName, (n1, n2) -> n1, LinkedHashMap::new));

注意事项

1、Map中的value不能为null
2、Map中的key不能重复(可以通过第二个toMap或者第三个toMap方法解决)

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

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

相关文章

2024年(第十届)全国大学生统计建模大赛选题参考(一)

本届大赛主题为“大数据与人工智能时代的统计研究”&#xff0c;参赛队围绕主题自拟题目撰写论文。 1. 大数据分析与处理 研究思路 数据收集&#xff1a;首先确定数据来源&#xff0c;例如社交媒体、企业数据库或公开数据集&#xff0c;并使用爬虫技术或API收集数据。数据预…

少儿编程机器人技术开发公司的创新之路

行业背景&#xff0c;国家政策利好 随着科技的不断发展&#xff0c;少儿编程机器人技术作为一种新兴的教育方式逐渐受到人们的关注。这项技术将编程与机器人技术相结合&#xff0c;通过互动性强、趣味性高的方式&#xff0c;帮助儿童学习编程知识&#xff0c;培养逻辑思维和创…

springboot 下载 Excel 文件的 Controller 层案例

环境 pom.xml 中 springboot版本&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version></parent>Excel 文件依赖&#xff1a; &l…

大模型产业落地,安全运营能否迎来“自动驾驶”时刻?

科技云报道原创。 通过一段文字描述&#xff0c;就能生成60秒堪比大片的视频&#xff0c;来自大模型Sora的出色表现&#xff0c;让全球都为之震撼。 无论是ChatGPT还是Sora&#xff0c;都只是大模型走出实验室的第一步&#xff0c;大模型如何在产业中落地&#xff0c;为具体的…

华为CSS堆叠技术介绍与实现

厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OCP\CKA\K8S\ CISP\CISSP\PMP\ ​ 什么是CSS&#xff1f; CSS交换机系统CSS&#xff08;Cluster Switch System&#xff09;&am…

【解决(几乎)任何机器学习问题】:交叉验证

在上⼀章中&#xff0c;我们没有建⽴任何模型。原因很简单&#xff0c;在创建任何⼀种机器学习模型之前&#xff0c;我们必须知道什么是交叉检验&#xff0c;以及如何根据数据集选择最佳交叉检验数据集。 那么&#xff0c;什么是 交叉检验 &#xff0c;我们为什么要关注它&…

云原生基础知识:容器技术的历史

容器化的定义&#xff1a; 容器化是一种轻量级的虚拟化技术&#xff0c;将应用程序及其所有依赖项&#xff08;包括运行时、系统工具、系统库等&#xff09;打包到一个称为容器的单独单元中。容器提供了一种隔离的执行环境&#xff0c;使得应用程序可以在不同的环境中运行&…

linux 无法加载ntfx磁盘问题

#fix 参考教程 j教程2 使用ntfsfix解决Linux下无法挂载NTFS硬盘的问题&#xff0c;主要是由硬盘分区的$MFT文件出现了问题&#xff0c;可以在windows下使用chkdsk命令或者在Linux下使用ntfsfix来进行修复。 这里需要事先安装好ntfsprogs这个工具&#xff0c;ubuntu下也可以直…

【机器人学导论笔记】四、操作臂逆运动学

4.1 本章任务 本章是将思路逆转过来&#xff0c;已知机械臂的位置和姿态&#xff0c;计算关节角&#xff0c;由此即为逆运动学。 这个任务可以分为两个小问&#xff1a;第一&#xff0c;进行坐标系变换&#xff0c;求出相对于基坐标系&#xff5b;B&#xff5d;的腕部坐标系&…

【CSS】CSS 总结 ① ( CSS 引入方式 | CSS 选择器 | 基础选择器 | 复合选择器 ) ★

文章目录 一、CSS 引入方式1、CSS 的 3 种引入方式 ( 内联 | 内嵌 | 外链 ) 二、CSS 选择器1、CSS 基础选择器2、CSS 复合选择器后代选择器子元素选择器交集选择器并集选择器链接伪类选择器 一、CSS 引入方式 CSS 引入方式相关博客 : 【CSS】CSS 层叠样式表 ① ( 简介 | CSS 引…

Odps执行SQL报错,提示Please set odps.sql.type.system.odps2=true to use it.

Odps执行SQL报错&#xff0c;提示Please set odps.sql.type.system.odps2true to use it.或提示Please add put { "odps.sql.submit.mode" : "script"} for multi-statement query in settings的解决方案 odps错误信息 AnonymousSQLTask--ODPS-0130071:[…

Windows中毒应急方式

一、检查系统账号安全 1、查看服务器是否有弱口令、可疑账号、隐藏账号、克隆账号、远程管理端口是否对公网开放。 2、WinR 打开运行&#xff0c;输入“eventvwr.msc”打开操作系统日志&#xff0c;查看管理员登录时间、用户名是否存在异常 二、检查异常端口、进程 1、使用 …

代码随想录Day39:不同路径、不同路径 II、整数拆分

不同路径 class Solution { public:/*动态规划五部曲&#xff1a;1、确定dp数组以及下标的含义&#xff1a;dp[i][j]&#xff0c;到dp[i][j]位置上的不同路径数量&#xff1b;2、确定递推公式:每次可由上边或者左边的位置移动而来&#xff0c;所以dp[i][j] dp[i-1][j] dp[i]…

8. Go实现Gin服务优雅关机与重启

文章目录 优雅关机优雅重启 无论是优雅关机还是优雅重启归根结底都是通过监听特定系统信号&#xff0c;然后执行一定的逻辑处理保障当前系统正在处理的请求被正常处理后再关闭当前进程。 优雅关机 优雅关机就是服务端关机命令发出后不是立即关机&#xff0c;而是等待当前还在…

Day37 socket、TCP、UDP

socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务&#xff0c;数据无差错、无重复的发送且按发送顺序接收。内设置流量控制&#xff0c;避免数据流淹没慢的接收方。数据被看作是字节流&#xff0c;无长度限制。 数据报套接字(SOCK_DGRAM) UD…

【设计模式 04】建造者模式

如果要构建的对象很复杂&#xff0c;那么可以将整个构建过程拆分成多个步骤&#xff0c;并为每一个步骤定义一个抽象的接口。并添加一个指导者用来控制构建产品的顺序和步骤。 Java实现&#xff1a; // 产品类 class Product {private String part1;private String part2;pub…

Node.js 最佳实践:改善你的应用程序设计 | 开源日报 No.191

goldbergyoni/nodebestpractices Stars: 92.4k License: CC-BY-SA-4.0 Node.js Best Practices 是一个关于 Node.js 最佳实践的开源项目。该项目汇总了许多顶级内容&#xff0c;包括 80 多个最佳实践、样式指南和架构技巧。以下是该项目的核心优势和主要功能&#xff1a; 提供…

每日一题-合成两个有序链表

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 以上是题目信息&#xff1a; 下面是解答过程 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ typedef struct Lis…

Redis6 搭建主从集群架构

文章目录 搭建Redis主从集群架构1.集群结构2.准备实例和配置3.启动4.开启主从关系5.测试 搭建Redis主从集群架构 安装部署单机版Redis6可参考&#xff1a; 安装部署单机版Redis6 1.集群结构 我们搭建的主从集群结构如图&#xff1a; 我们计划是在一台虚拟机里去部署三个R…

腾讯云轻量服务器Windows系统使用IIS实现公网直链访问文件

windows方便所以服务器装的windows系统&#xff0c;windows默认不能分享文件直链&#xff0c;只要用IIS建个站点就行了 先弄一台有公网ip的windows系统服务器打开服务器管理器&#xff0c;添加这个 打开IIS右键添加网站 程序池默认&#xff0c;路径选个文件夹作为网站根目录 …