在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. websocket: the client is not using the websocket protocol: ‘upgrade’ token not found in ‘Connection’ head,客户端没有使用websocket协议:'upgrade'令牌未在'Connection'头中找到

    错误分析 websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connec ...

  2. 云服务器下如何部署Flask项目详细操作步骤

    参考网上各种方案,再结合之前学过的Django部署方案,最后确定Flask总体部署是基于:centos7+nginx+uwsgi+python3+Flask之上做的. 本地windows开发测试好了我 ...

  3. Pydantic配置继承抽象基类模式

    title: Pydantic配置继承抽象基类模式 date: 2025/3/21 updated: 2025/3/21 author: cmdragon excerpt: Pydantic模型配置系 ...

  4. 关于SIFT,GIFT在旋转不变性上的对比实验

    目录 关于SIFT,GIFT在旋转不变性上的对比实验 回顾 准确率测试 总结 核心代码 关于SIFT,GIFT在旋转不变性上的对比实验 这篇文章不讨论SIFT,GIFT的实现原理,只从最终匹配结果的准 ...

  5. 【Java】String字符串格式化

    一.前言 String.format() 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", &qu ...

  6. git 访问方式浅谈

    小小总结下git的访问方式,留爪. git访问方式简介 https:每次fetch/push/pull都需要输入username & password ssh:通过ssh-keygen生成的公 ...

  7. Pycharm两种快速激活方式(附最新激活码和插件)

    小张的Pycharm最近弹出提示框 Your license has expired提示过期....纳尼!!!! 是不是看到这个也很头疼,.于是我就在想有没有一种方式可以让他永久免费的,于是小张从网上 ...

  8. 使用注解的方式编写:@Aspect运用

    列子. public interface Calculator { // 加 public int add(int i,int j); // 减 public int sub(int i,int j) ...

  9. 判断属性值,选择性执行下一步(get element attribute指令的用法)

    应用场景: 下图线下支付,在退款前需要勾选这种支付方式,否则无法实现支付. 如果在测试脚本内即加入勾选指令,那么在下次执行的时候就会再次勾选,从而造成去除勾选的操作 对比一下勾选前后,勾选框元素内容组 ...

  10. 加减法计算在RB中的应用(比如计算库存)(should be equal as integers指令的使用)

    订单测试过程中,对库存的校验是很关键的步骤 下面这个案例即实现对订单前后库存检查.公式计算.结果匹配,输出测试结果.具体脚本如下图 步骤如下: 1.获取订单前的库存 2.订单流程 3.获取订单后的库存 ...