JAVA8-Lambda-List转Map

List转Map需要注意点是在收集map时Collectors.toMap()建议选三个入参的方法。

JAVA8-Lambda-List转Map

示例如下:(注意list中的”张三”有两个我们将其作为Map的key)

java<strong><em>*</em></strong>*</p> <h4>无第三个参数示例</h4> <pre><code>public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(new Student("张三", 19, "杭州")); list.add(new Student("李四", 18, "北京")); list.add(new Student("张三", 17, "西安")); list.add(new Student("赵六", 16, "兰州")); Map map = list.stream() .collect(Collectors.toMap(Student::getName, student -> student)); System.out.println(map.toString()); } </code></pre> <pre><code> #### 执行结果:(Duplicate key 提示key重复,收集map时不知道保留哪个key) ![JAVA8-Lambda-List转Map](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230619/2295904-20221105111541114-1902671165.png) #### 有第三个参数示例: 第三个参数是指明当key重复时,我需要用哪一个
// (k1, k2) -> k2) 当key重复时要将后面出现的作为我的收集对象,抛弃前面已收集的。
// (k1, k2) -> k1) 当key重复时保留已收集的,抛弃新出现的。
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Student("张三", 19, "杭州"));
list.add(new Student("李四", 18, "北京"));
list.add(new Student("张三", 17, "西安"));
list.add(new Student("赵六", 16, "兰州"));

Map map = list.stream()
.collect(Collectors.toMap(Student::getName, student -> student, (k1, k2) -> k1));

System.out.println(map.toString());
}

(k1, k2) -> k2)的结果:(张三的结果是list中最后一次出现的(索引最大的))

{&#x674E;&#x56DB;=Student{name='&#x674E;&#x56DB;', age=18, addr='&#x5317;&#x4EAC;'}, &#x5F20;&#x4E09;=Student{name='&#x5F20;&#x4E09;', age=17, addr='&#x897F;&#x5B89;'}, &#x8D75;&#x516D;=Student{name='&#x8D75;&#x516D;', age=16, addr='&#x5170;&#x5DDE;'}}

(k1, k2) -> k1)的结果:(张三的结果是list中第一次出现的(索引最小的))

{&#x674E;&#x56DB;=Student{name='&#x674E;&#x56DB;', age=18, addr='&#x5317;&#x4EAC;'}, &#x5F20;&#x4E09;=Student{name='&#x5F20;&#x4E09;', age=19, addr='&#x676D;&#x5DDE;'}, &#x8D75;&#x516D;=Student{name='&#x8D75;&#x516D;', age=16, addr='&#x5170;&#x5DDE;'}}

Original: https://www.cnblogs.com/CodeLuckly/p/16859874.html
Author: CodeLuckly
Title: JAVA8-Lambda-List转Map

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713681/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 网络安全中常用浏览器插件、拓展

    引言 现在的火狐、Edge( Chromium内核)、Chrome等浏览器带有插件、拓展(Plugin)的功能。这些插件中有的可以过滤广告,有的提供便捷的翻译,有的提供JavaSc…

    技术杂谈 2023年6月21日
    099
  • 上周热点回顾(7.4-7.10)

    热点随笔: · 一大波开源小抄来袭 (削微寒)· 一题多解,ASP.NET Core应用启动初始化的N种方案[上篇] (Artech)· [开源精品] .NET Redis Cli…

    技术杂谈 2023年5月31日
    087
  • oarcle 修改时间在原来时间上加1个月/天/年

    使用函数 add_monthsadd_months(time,months) months为整数,正数时是加月,负数时为减月。UPDATE TABLE ASET LOCALTIME…

    技术杂谈 2023年5月31日
    093
  • Redis变慢?深入浅出Redis性能诊断系列文章(四)

    (本文首发于”数据库架构师”公号,订阅”数据库架构师”公号,一起学习数据库技术,助力职业发展) 本篇为Redis性能问题诊断系列的第…

    技术杂谈 2023年7月25日
    082
  • 如何在 Kubernetes Pod 和您的机器之间复制文件

    在 Kubernetes Pod 中运行的容器是不需要手动交互的独立计算单元。有时您可能需要将文件复制到 Pod 的文件系统或从 Pod 的文件系统复制文件,这可能是因为您正在调试…

    技术杂谈 2023年5月31日
    083
  • MySQL 服务无法启动。服务没有报告任何错误。

    版本8.0.25,今天启动发现抱错,网上搜索一下发现这样可行 启动MySQL报错: 搜索了一下,按照这样步骤解决了 1.配置一下my.ini [mysqld] basedir =&…

    技术杂谈 2023年7月25日
    087
  • vs 2005 thread 无法调试

    两种办法: 1、打开项目属性,在”Debug”一项里,把”Enable the Visual Studio hosting process&#8…

    技术杂谈 2023年7月11日
    065
  • 分布式ID 生成方案

    作者:shmilychen,腾讯 IEG 后开开发工程师 在业务开发中,会存在大量的场景都需要唯一 ID 来进行标识。比如,用户需要唯一身份标识;商品需要唯一标识;消息需要唯一标识…

    技术杂谈 2023年5月31日
    086
  • Docker快速部署clickhouse

    Docker快速部署clickhouse Clickhouse特点 完备的DBMS:不仅是个数据库,也是个数据库系统 列存储和数据压缩:典型的olap数据库特性 向量化并行:利用C…

    技术杂谈 2023年6月21日
    0102
  • Pthread并发编程(二)——自底向上深入理解线程

    在本篇文章当中主要给大家介绍线程最基本的组成元素,以及在 pthread 当中给我们提供的一些线程的基本机制,因为很多语言的线程机制就是建立在 pthread 线程之上的,比如说 …

    技术杂谈 2023年7月24日
    080
  • 「萌新指南」SOA vs. 微服务:What’s the Difference?

    实话实说,在我还没有实习之前,我是连 SOA 是啥都不知道的,只听说过微服务,毕竟微服务实在太火了,想不知道都难,我觉得实习的时候肯定也是微服务,进组之后发现是 SOA 架构,当时…

    技术杂谈 2023年7月24日
    088
  • go 单元测试testify

    testify用go实现的一个assert风格的测试框架,这个包提供了我们需要的断言的功能,提供了非常丰富的断言方法。 提供了测试suite、断言、mock三种功能。 官方文档:h…

    技术杂谈 2023年5月31日
    083
  • java学习之SpringMVC

    Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。 Spring MVC 是结构最清晰的 Servl…

    技术杂谈 2023年6月21日
    089
  • 设计模式 17 迭代器模式

    迭代器模式(Iterator Pattern)属于 行为型模式 概述 迭代器模式是 Java 中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,而不需要知道集合对象的底层表…

    技术杂谈 2023年7月25日
    094
  • binary与进制转换

    规律数: 0111为4位补码的最大值,规律是1个0和3个1,可以推导出 32位补码的最大值:1个0和31个1——(011111111111111111111…

    技术杂谈 2023年7月10日
    056
  • K8s配置存活、就绪和启动探测器

    这篇文章介绍如何给容器配置存活、就绪和启动探测器。 kubelet 使用 存活探测器来知道什么时候要重启容器。 例如,存活探测器可以捕捉到死锁(应用程序在运行,但是无法继续执行后面…

    技术杂谈 2023年5月30日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球