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)

大家都在看

  • 怎样记住Integer的最大值(有趣的思维和搞笑的回答)

    今天一个同事问我,数据库里面的某表如果用int做PK,那该表最多可以放多少记录,我说简单啊,就是2^31(正数),跟.NET的Int32.MaxValue一样,约等于20亿(正数)…

    技术杂谈 2023年5月31日
    077
  • Ruby系列文章

    骏马金龙 (博客已搬家:www.junmajinlong.com) 网名骏马金龙,钟情于IT世界里的各种原理和实现机制,强迫症重症患者。爱研究、爱翻译、爱分享。特借此一亩三分田记录…

    技术杂谈 2023年5月31日
    0103
  • iOS 分类(Category)和扩展(Extension)

    Extension:扩展, 延展, 匿名分类;放在.m文件中;声明私有属性; (不对子类暴露)声明私有方法;声明私有成员变量; 分类( )扩展(Extension) 运行时决议 编…

    技术杂谈 2023年5月30日
    077
  • 最小化安装debian11

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月25日
    0213
  • 多项式求逆

    已知一度数为n的多项式(A(x))。 [A(x)B(x)\equiv1\pmod {x^n} ] (B(x))即为(A(x))的逆元。 多项式的除法、(\exp)和(\ln)都是基…

    技术杂谈 2023年6月21日
    098
  • Swoole——创建TCP服务

    启动TCP服务代码 <?php /** * 智慧公厕 */ namespace Toilet\Action; class IndexAction extends Common…

    技术杂谈 2023年5月31日
    092
  • Seata 环境搭建

    Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。 https://seata.io/zh-cn/docs/…

    技术杂谈 2023年5月31日
    098
  • 猪齿鱼开源四周年庆典,邀您共享精彩瞬间

    520真情相遇,「猪齿鱼」与你相伴, 从此一番过往皆是你! 在这样一个充满爱与温馨的日子里,「猪齿鱼」也迎来了自己四周岁的生日。小伙伴们,让我们一起坐上时光穿梭机,回顾「猪齿鱼」的…

    技术杂谈 2023年7月23日
    076
  • 页面国际化

    页面国际化 有的时候,我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要对页面进行国际化设计了。 6.1 准备工作 在IDEA中统一设置properties的编码格式 6….

    技术杂谈 2023年6月21日
    081
  • 访问权限控制

    一.编译单元 1-1 概念 一个Java源代码文件通常被称为一个编译单元,每个编译单元的后缀需是.java,并且每个编译单元中最多只能有1个public类(当然,可以为0个)。 1…

    技术杂谈 2023年7月23日
    091
  • Kaldi 语音识别基础教程

    Kaldi 介绍 Kaldi 是由 C++ 编写的语音识别工具,其目的在于为语音识别研究者提供一个研究和使用的平台。 Kaldi 环境搭建 本文主要通过使用 Docker 和 Nv…

    技术杂谈 2023年5月30日
    085
  • 市场主流的G-sensor芯片盘点

    一 前记 1.简介 随着可穿戴智能硬件的广泛发展,G-sensor成了一个必不可少的器件。梳理,测试和运用这些传感器。是做可穿戴产品必不可少的环节。 二 产品解析 1.ST的G-s…

    技术杂谈 2023年5月31日
    092
  • HIT软构博客3-javaI/O(FileReader、BufferedReader) 学习在Lab1中使用的java I/O类

    通过 Java I/O API 在 Java 中执行文件处理。 在 Java 中,自动为我们创建了 3 个流。所有这些流都与控制台相连。 1) System.out:标准输出流 2…

    技术杂谈 2023年7月11日
    062
  • 重温童年记忆中的“五子棋” | 参与得证书+惊喜好礼

    简介: 当童年记忆中的”五子棋”遇上最新最火热的 Serverless,会擦出什么样的火花?当童年记忆中的”五子棋”遇上最新最火热的…

    技术杂谈 2023年7月11日
    074
  • Spring Ioc源码分析系列–前言

    Spring Ioc源码分析系列–前言 为什么要写这个系列文章 首先这是我个人很久之前的一个计划,拖了很久没有实施,现在算是填坑了。其次,作为一个Java开发者,Spr…

    技术杂谈 2023年7月25日
    075
  • Golang内存管理和垃圾回收

    超干货!彻底搞懂Golang内存管理和垃圾回收 https://mp.weixin.qq.com/s/7Yjk9oeOPSm1h1SEnNh13A Golang内存管理和垃圾回收 …

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