使用Java8的Stream流的Collectors.toMap来生成Map结构

问题描述

在日常开发中总会有这样的代码,将一个List转为Map集合,使用其中的某个属性为key,某个属性为value。

常规实现

public class CollectorsToMapDemo {@Data@NoArgsConstructor@AllArgsConstructorpublic static class Student {private String name;private Integer age;}public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 18));list.add(new Student("李四", 19));list.add(new Student("王五", 20));// 将这个list转为map集合,key=age,value=studentMap<Integer, Student> map = new HashMap<>();for (Student student : list) {if (map.containsKey(student.getAge())) {// 如果key已经存在的解决逻辑map.put(student.getAge(), student);} else {map.put(student.getAge(), student);}}}
}

Java8实现

public class CollectorsToMapDemo {@Data@NoArgsConstructor@AllArgsConstructorpublic static class Student {private String name;private Integer age;}public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 18));list.add(new Student("李四", 19));list.add(new Student("王五", 20));// 将这个list转为map集合,key=age,value=studentMap<Integer, Student> map = list.stream().collect(Collectors.toMap(Student::getAge, Function.identity()));System.out.println(map);}
}

输出结果:
在这里插入图片描述

解释一下参数:
第一个参数:Student::getAge表示选择Student的getAge作为map的key值;
第二个参数:Function.identity()表示选择将原来的对象作为Map的value值;(也可以使用s -> s来表示选对象)

key值重复,就会报错。

public class CollectorsToMapDemo {@Data@NoArgsConstructor@AllArgsConstructorpublic static class Student {private String name;private Integer age;}public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("张三", 18));list.add(new Student("李四", 19));list.add(new Student("王五", 20));list.add(new Student("赵六", 18));// 将这个list转为map集合,key=age,value=studentMap<Integer, Student> map = list.stream().collect(Collectors.toMap(Student::getAge, Function.identity()));System.out.println(map);}
}

输出结果:
在这里插入图片描述

如何解决:
要传第三个参数,就是key值重复的处理逻辑。
例如传(a, b) -> b就表示a和b重复选后输入的b元素。

Map<Integer, Student> map = list.stream().collect(Collectors.toMap(Student::getAge, Function.identity(), (a,b)->b));

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

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

相关文章

OpenCV-python numpy和基本作图

文章目录 一、实验目的二、实验内容三、实验过程Numpy1.NumPy 操作2.NumPy Ndarray 对象3.NumPy 基本类型4.NumPy 数组属性ndarray.ndimndarray.shapendarray.itemsizendarray.flags 5.NumPy 创建数组numpy.emptynumpy.zerosnumpy.ones 6.NumPy 从已有的数组创建数组numpy.asar…

SpringDataRedis 操作 Redis,并指定数据序列化器

文章目录 1. SpringDataRedis 概述2. 快速入门2.1 导入pom坐标2.2 配置文件2.3 测试代码2.4 数据序列化器2.5 StringRedisTemplate2.6 总结 1. SpringDataRedis 概述 SpringData 是Spring 中数据操作的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中对Redis的集成模…

使用vue UI安装路由插件

1.使用vue创建项目 vue create vue-appvue ui 2.使用vue ui界面创建管理项目 终端页面输入&#xff1a;vue ui 创建项目 安装完成。可以直接在ui界面运行&#xff0c;也可以在编辑器中使用命令运行 安装路由&#xff0c;安装状态 选择插件 - 添加vue-router、添加vuex 安装…

C# WebSocket简单使用

文章目录 前言Fleck调试工具初始化简单使用 前言 最近接到了一个需求&#xff0c;需要网页实现上位机的功能。那就对数据传输的实时性要求很高。那就只能用WebSocket了。这里简单说一下我的WebSocket如何搭建 Fleck C# WebSocket(Fleck) 客户端:html Winfrom Fleck Github官网…

Unity3D中实现箭头指向目标点的效果(shader)

系列文章目录 Unity工具 文章目录 系列文章目录前言一、效果如下二、制作步骤2-1、制作shader2-2、shader代码2-3、制作材质球2-4、新建Quad2-5、制作预制体2-6 、实现代码2-7、设置Quad到脚本2-8、路径设置如下 三、说明四、运行程序总结 前言 大家好&#xff0c;我是心疼你…

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 15 章:问题解答提示

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南—第 15 章&#xff1a;问题解答提示 问题解答提示是一种允许模型生成回答特定问题或任务的文本的技术。要做到这一点&#xff0c;需要向模型提供一个问题或任务作为输入&#xff0c;以及与该问题或任务相关的任…

机器学习笔记 - 使用深度学习提高传统机器学习性能

一、简述 深度学习在许多不同领域实现最先进的性能,包括图像分类、自然语言处理和语音识别。这里主要探讨了如何使用深度学习来增强经典机器学习模型的有效性。 决策树、随机森林和线性回归只是多年来在商业中广泛使用的经典机器学习模型的几个例子。由于其简单性、清晰性和可…

鸿蒙开发—UI框架概述

基本概念 UI框架 HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可为开发者提供应用UI开发所必需的能力&#xff0c;比如多种组件、布局计算、动画能力、UI交互、绘制等。 方舟开发框架针对不同目的和技术背景的…

数据结构与算法编程题47

无向图的邻接表 #include <iostream> using namespace std;#define MVnum 100 typedef string VertexType;typedef struct ArcNode {int adjvex;struct ArcNode* nextarc;int weight; }ArcNode;typedef struct VNode {VertexType data;struct ArcNode* firstarc; }VNode,…

性能测试工具:Jmeter介绍

JMeter是一个开源的Java应用程序&#xff0c;由Apache软件基金会开发和维护&#xff0c;可用于性能测试、压力测试、接口测试等。 1. 原理 JMeter的基本原理是模拟多用户并发访问应用程序&#xff0c;通过发送HTTP请求或其他协议请求&#xff0c;并测量响应时间、吞吐量、并发…

关于对Spring事件监听机制相关解析

1、Spring事件监听器使用 Spring事件监听体系包括三个组件&#xff1a;事件、事件监听器&#xff0c;事件广播器 事件&#xff1a;定义事件类型和事件源&#xff0c;需要继承ApplicationEvent import org.springframework.context.ApplicationEvent; public class OrderEvent…

虹科新闻丨虹科正式加入广州市新联会科创分会

来源&#xff1a;虹科电子科技有限公司 虹科新闻丨虹科正式加入广州市新联会科创分会 11月7日&#xff0c;由广州市委统战部、广州开发区管委会、黄埔区人民政府指导&#xff0c;佳都集团、佳都科技集团、广州开发区投资集团共同主办的未来之城大湾区元宇宙创新示范中心&#…

Nginx(性能优化)

到这里文章的篇幅较长了&#xff0c;最后再来聊一下关于Nginx的性能优化&#xff0c;主要就简单说说收益最高的几个优化项&#xff0c;在这块就不再展开叙述了&#xff0c;毕竟影响性能都有多方面原因导致的&#xff0c;比如网络、服务器硬件、操作系统、后端服务、程序自身、数…

从事件驱动到 async/await

从事件驱动到 async/await 在 async/await 出现之后&#xff0c;异步变得更加简单&#xff0c;这意味着我们不需要重新审视使​​用 Promise 的简单方法。然而&#xff0c;我认为有一项有用的技术值得分享。 假设我们正在实现事件驱动的代码。为了便于说明&#xff0c;我们通…

金鸣表格文字识别大师扫描仪使用技巧

所需硬件&#xff1a;PC&#xff08;电脑&#xff09;、扫描仪 所需软件&#xff1a;金鸣表格文字识别大师5.0以上版本&#xff08;以下简称“本软件”&#xff09; 实现功能&#xff1a;直接用扫描仪扫描图片并将其转换为可编辑的excel或word. 实现原理&#xff1a;本软件利…

DevEco Studio集成ArkUI-X

语雀知识库地址&#xff1a;语雀HarmonyOS知识库 飞书知识库地址&#xff1a;飞书HarmonyOS知识库 在上篇文章(HarmonyOS应用开发工具DevEco Studio安装与使用)中我说到官方推出了4.0 Beta版本的IDE&#xff0c;这篇文章就来介绍这个版本的安装与使用 该版本集成了HarmonyOS多…

利用ChatGPT的写作能力,可以更好地组织思路、提升论文的逻辑性和质量

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

HG/T 5367.2-2022 轨道交通车辆耐电弧绝缘涂料检测

轨道交通车辆用耐电弧绝缘涂料是指施涂于地铁、轻轨、有轨电车等轨道交通车辆车顶外部受电弓区域的耐电弧绝缘涂料&#xff0c;其配套涂料层具有抗电弧绝缘作用。 HG/T 5367.2-2022A类涂料底漆、中间漆和面漆测试&#xff1a; 测试项目 测试方法 不挥发物含量 GB/T 1725 干…

UE4.27-UE5.1设置打包Android环境

打包Android配置文件 1. 配置打包Android的SDK需求文件位于下面文件中&#xff1a; 2. 指定了对应的SDK环境变量名字以及NDK需求等&#xff1a; UE4.27-UE5.1--脚本自动配置 安装前提 1. 务必关闭虚幻编辑器和Epic Games Launcher&#xff0c;以确保NDK组件的安装或引擎环境…

P1005 [NOIP2007 提高组] 矩阵取数游戏

网址&#xff1a;P1005 [NOIP2007 提高组] 矩阵取数游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 动态规划和高精度的组合&#xff0c;使我的滨州旋转 最后只得了80&#xff0c;两个测试点超时了 看题解有人是用了int128来做的&#xff0c;明天学一下 我的递归思路和…