首页 > 其他分享 >使用Stream流将List转化为Map的几种方式

使用Stream流将List转化为Map的几种方式

时间:2023-10-14 10:03:21浏览次数:25  
标签:Map stream Stream 流将 userId UserEntity key entityList

在工作中常常会遇到将List转化为Map的场景,下面总结了经常使用到的几种方式;并简单的做了简单测试,供大家学习使用。

准备工作:

List<UserEntity> entityList = new ArrayList<>();
UserEntity userEntity = new UserEntity();
userEntity.setUserId("0001");
userEntity.setUserName("0001Name");
userEntity.setUserMobile("0001Phone");
entityList.add(userEntity);

UserEntity userEntity2 = new UserEntity();
userEntity2.setUserId("0002");
userEntity2.setUserName("0002Name");
userEntity2.setUserMobile("0002Phone");
entityList.add(userEntity2);

方式一:key和value都是对象中的某个属性值

key为userId、value为userName

Map<String, String> userMap = entityList.stream().collect(Collectors.toMap(UserEntity::getUserId, UserEntity::getUserName));

注:当userId出现重复的情况,会报 Duplicate key的错误。

方式二:key是对象中的某个属性值,value是对象本身。

key为userId、value为UserEntity对象

Map<String, UserEntity> userMap = entityList.stream().collect(Collectors.toMap(UserEntity::getUserId, user -> user));

另外一种写法:

Map<String, UserEntity> userMap = entityList.stream().collect(Collectors.toMap(UserEntity::getUserId, Function.identity()));

注:以上两种写法,当userId出现重复的情况,同样会报 Duplicate key的错误。

如果存在key重复的情况,使用第二个key去覆盖第一个key的值,写法如下:

Map<String, UserEntity> userMap = entityList.stream().collect(Collectors.toMap(UserEntity::getUserId, Function.identity(), (oldValue, newValue) -> newValue));

方式三:List根据key进行分组

根据userId进行分组

Map<String, List<UserEntity>> userIdGroupByList = entityList.stream().collect(Collectors.groupingBy(UserEntity::getUserId));


使用Stream流将List转化为Map的几种方式_Stream流

标签:Map,stream,Stream,流将,userId,UserEntity,key,entityList
From: https://blog.51cto.com/u_15012045/7858888

相关文章

  • 前端map函数
    前端中的map函数是JavaScript中的数组方法,它可以用于遍历数组并返回一个新的数组。map函数接受一个回调函数作为参数,该回调函数会对数组中的每个元素执行某个操作,并将操作后的结果存储在新的数组中。以下是map函数的基本语法:array.map(callback(currentValue[,index[,array]])[,......
  • QT基础教程(QMap和QHash)
    (文章目录)前言本篇文章将为大家讲解QT中两个非常重要的类:QMap和QHash。QMap和QHash都是Qt框架中用于存储键值对的数据结构,它们提供了快速的查找、插入和删除操作,但在某些方面有一些不同之处。一、QMapQMap是一个有序的键值对容器,它根据键的顺序来存储元素。当您需要按照键的......
  • elasticsearch通过Java class类的@Setting和@Mapping来定义索引index
    今天就来和大家讲讲如何将es索引中的mapping和setting在索引index和class联系起来,其实在这个问题也困扰我好久了,一直没有解决,在elasticsearch7.x版本的时候貌似好像可以用request在程序中来建立索引,像Stringindex=“{“mapping”:...}”之类的操作,干起来比较复杂,在elasticsear......
  • 6450: levil与时间点 map
    描述 levil有T个时间点会对一个长度未知数组进行操作,开始时数组里仅有一个元素x,接下来每个时间点,levil都会进行下面的操作中的一种。操作一:输出当前数组中最大元素的最大因子。操作二:将一个新的数y加入数组。操作三:输出数y在数组中有几个。操作四:将数y从数组中删除一个。......
  • 7249: 改变数字 map
    描述 给定n个整数,现在每次能改动一个整数,问最少需要多少次改动才能将它们改成全部相同。 输入 第一行为正整数n(n<=1000000)。第二行为n个整数(绝对值不超过109)。 输出 输出最少改动的次数。 样例输入 512125样例输出 3map大法好呀#include......
  • 5383: C++实验:STL之multimap
    描述  使用STL中的multimap记录用户的所有电话号码,yuyu想查询用户有多少个电话号码,crq则想查询时输出所有的号码。部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码。 C++intmain(){ multimap<string,string>sm; stringname,phone; intn; cin>>......
  • #Python中 (map、filter、reduce)这几个内置方法的用法
    1、map 映射l=[1,2,3,4,5]res=map(lambdax:x**2,l)print(list(res))>>>[1,4,9,16,25]注:此时的res必须使用list(res)否则只会返回一个对象 2、filter过滤l=[1,2,3,4,5]res=filter(lambdax:x>3,l)print(list(res))>>>[4......
  • Oracle索引之(b-tree、bitmap、聚集、非聚集)
    Oracle索引之(b-tree、bitmap、聚集、非聚集)一、B-TREE索引一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。可以用下图一来描述B树索引的结构。其中,B表示分支节点,而L表示叶子节点。对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是......
  • Java流(Stream)、文件(File)和IO
    Java流(Stream)、文件(File)和IOJava流(Stream)、文件(File)和IOjava.io包几乎包含了所有操作输入、输出需要的类所有这些流类流类代表了输入源和输出目标Java.io包中的流支持很多种格式比如:基本类型、对象、本地化字符集等等一个流可以理解为一个数据的序列输入流表示从一......
  • 无涯教程-DBUtils - MapListHandler接口
    org.apache.commons.dbutils.MapListHandler是ResultSetHandler接口的实现,负责将ResultSet行转换为Maps列表,此类是线程安全的。MapListHandler-声明以下是org.apache.commons.dbutils.MapListHandler类的声明-publicclassMapListHandlerextendsAbstractListHandler......