在Stream流中将List转换为Map,是使用Collectors.toMap方法来进行转换。

  1. key和value都是对象中的某个属性值。
Map<String, String> userMap1 = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
  1. 使用箭头函数

Map中,key是对象中的某个属性值,value是对象本身。

Map<String, User> userMap2 = userList.stream().collect(Collectors.toMap(User::getId, User -> User));
  1. 使用Lambda表达式

key是对象中的某个属性值,value是对象本身(使用Function.identity()的简洁写法)。

Map<String, User> userMap3 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
  1. 处理重复的key

key是对象中的某个属性值,value是对象本身,当key冲突时选择第二个key值覆盖第一个key值。

Map<String, User> userMap4 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (oldValue, newValue) -> newValue));

如果不正确指定Collectors.toMap方法的第三个参数(key冲突处理函数),那么在key重复的情况下该方法会报出【Duplicate Key】的错误导致Stream流异常终止,使用时要格外注意这一点。当然,也可以使用第一个key覆盖第二个key。

  1. 转换成TreeMap
    public static void main(String[] args) {
//将List转换为Map,解决key冲突的问题
TreeMap<String,String> collect = users.stream().
//User对象的id属性作为key,但是key相同时,使用旧的value值
collect(Collectors.toMap(User::getId, User::getName,
(k1, k2) -> k1, TreeMap::new
));
System.out.println(collect);
}

如果把TreeMap改为LinkedHashMap,就可以转换成LinkedHashMap。

  1. 以某个属性分组

主要用于对相同key值的数据进行合并,例如统计各个部门的员工名单时,就要把全部员工list转换成以部门维度汇总的map。示例以部门ID进行分组,相同ID 的员工映射到同一个ID:

Map<String, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getDepartmentId));

Reference

Java stream实现list转化为map的更多相关文章

  1. java中将jsonObject字符串转化为Map对象

    java中将jsonObject字符串转化为Map对象 1.我们这里使用json-lib包进行转换,可在http://json-lib.sourceforge.net/下载依赖于下面的jar包: ja ...

  2. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...

  3. Java Stream 使用详解

    Stream是 Java 8新增加的类,用来补充集合类. Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的. Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的 ...

  4. Java Stream API进阶篇

    本文github地址 上一节介绍了部分Stream常见接口方法,理解起来并不困难,但Stream的用法不止于此,本节我们将仍然以Stream为例,介绍流的规约操作. 规约操作(reduction op ...

  5. java stream 原理

    java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...

  6. Java 容器源码分析之 Map

    ava.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map.List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建 ...

  7. Java 8 – How to sort a Map

    Java 8 – How to sort a Map 1. Quick ExplanationMap result = map.entrySet().stream() .sorted(Map.Entr ...

  8. java stream collector

    Java Stream API进阶篇 本文github地址 上一节介绍了部分Stream常见接口方法,理解起来并不困难,但Stream的用法不止于此,本节我们将仍然以Stream为例,介绍流的规约操作 ...

  9. java中 json和bean list map之间的互相转换总结

    JSON 与 对象 .集合 之间的转换 JSON字符串和java对象的互转[json-lib]   在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级 ...

  10. Java Stream函数式编程案例图文详解

    导读 作者计划把Java Stream写成一个系列的文章,本文只是其中一节.更多内容期待您关注我的号! 一.什么是Java Stream? Java Stream函数式编程接口最初是在Java 8中引 ...

随机推荐

  1. C# 中的“相等判断”

    C# 中的"相等判断" C# 中判断相等的方式很多,例如: 双等号 ==​ 实例的 Equals()​ 方法 ​Object.Equals()​ 静态方法 ​Object.Refe ...

  2. leetcode两数之和变种(找出所有满足总和的两个数)

    偶尔看到leetcode 的两数之和,但是之前遇到过两数之和的变种,之前一开始想不出来,后面看了别人的题解才想到解法,这里记录一下. 题目描述: 原leetcode题目描述 给定一个整数数组 nums ...

  3. python正则表达式笔记2

    由 '\' 和一个字符组成的特殊序列在以下列出. 如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符.比如,\$ 匹配字符 '$'. \number匹配数字代表的组合.每个 ...

  4. HashMap-线程不安全的原因

    前言 HashMap线程安全的问题,在各大面试中都会被问到,属于常考热点题目.虽然大部分读者都了解它不是线程安全的,但是再深入一些,问它为什么不是线程安全的,仔细说说原理,用图画出一种非线程安全的情况 ...

  5. 史上最全EffectiveJava总结(二)

    方法 49.检查参数的有效性 每次编写方法或构造函数时,都应该考虑参数存在哪些限制,并在文档中记录下来,然后在方法的开头显式地检查. 如果没有在方法开头就验证参数,可能会违反故障原子性.因为方法可能会 ...

  6. fastreport6的frxpngimage.pas不能编译xe下

    升级很痛苦,因为兼容问题. fastreport6的frxpngimage.pas不能编译出现错误 procedure TChunkIDAT.CopyInterlacedRGB8(const Pass ...

  7. 阿里巴巴暑期实习 Java 面经,灵犀互娱一面

    哈希表熟悉吗,可以如何实现? 开散列版本什么时候需要扩容 高并发服务器内的主从reactor模型是如何实现的? 进程 线程 协程 的区别? 如何保证线程安全 ? 了解读写锁吗? 单例模式有了解吗? 可 ...

  8. Transformer自注意力機制如何捕捉“今昔對仗”

    讀者希望我結合<道德經>等文言文實踐,展示自注意力機制如何捕捉"今昔對仗". 首先,讀者之前指出:在總結鄧鴻的丼型結構時遺漏了關鍵點,並強調要批判瑪律可夫假設而非全面否 ...

  9. CDF与开源DevOps持续交付系统JenkinsX,Spinnaker,Tekton,Screwdriver

    什么是CDF 持续交付基金会(CDF)是许多快速增长的持续交付项目(包括Jenkins.Jenkins X.Spinnaker,Tekton和Screwdriver)的中立供应商.CDF通过开放模型. ...

  10. CH182的ESP32驱动

    CH182的ESP32驱动需要自取 https://files.cnblogs.com/files/blogs/745523/esp-eth.zip?t=1739322979&download ...