首页 > 编程语言 >Java stream实现list转化为map

Java stream实现list转化为map

时间:2023-04-15 12:57:52浏览次数:73  
标签:map Java Collectors stream Map collect User key

在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

标签:map,Java,Collectors,stream,Map,collect,User,key
From: https://www.cnblogs.com/east7/p/17320893.html

相关文章

  • 快速复习Java
    //数据类型//1.整数型bytea=127;//范围-128~127shortb=29999;//范围正负三万intc=999999999;//范围正负21亿//赋值long类型时,数值如果比int类型表述范围大时,必须要在数值后面加l/L.longd=999;longe=9999999999L;//范围很大很大//2.浮点型f......
  • Hashmap实现原理
     HashMap线程不安全loadFacter负载因子,默认值为0.75threshold=数组长度*负载因子loadFactorHashMap默认容量initial_capacity:16HashMap数组部分称为哈希桶当链表长度大于等于8时,链表数据将以红黑树的形式进行存储,当长度降到6时,转成链表输入数据计算方法hash(key......
  • Java 把列表元素拼接字符串
    摘要:使用JavaCollectors.joining方法把列表中的所有元素通过指定的分隔符连接字符串。目录综述使用For循环StringUtils.join函数Collectors.joining(Function)函数GuavaJoinerjoin函数String.join函数结束语综述  在项目开发中,经常遇到的一个问题就是要把得到的一个......
  • Java基础知识点内部类之局部内部类和匿名内部类
    一:局部内部类1概述:将内部类定义在方法里面就叫做局部内部类。类似于方法里面的局部变量。2.注意点:外界无法直接使用,需要在方法内部创建对象并使用。3.该类可以直接访问外部类成员,也可以访问方法内的局部变量。publicclassOuter{publicstaticvoidshow(){......
  • java入门
    JDK:JavaDevelopmentKit(Java 集成开发工具)按应用平台划分:J2EE: Java2EnterpriseEdition 可扩展的企业级应用J2SE: Java2StandardEdition 用于工作丫和PC机的Java标准平台J2ME:Java2MicroEdition用于嵌入式消费电子平台按运行的操作系统划分:JDK分别有f......
  • 02_JAVA编写高质量的代码
    高质量代码不仅仅要做到运行正确,还应做到可读性强、易于维护,简洁高效。......
  • Java学习路线
    前期准备写代码的工具:菜鸟工具:https://c.runoob.com/compile/10想学好编程,别背代码,要多写,把这句话刻到脑子里。选视频和找资料的小技巧:多看评论区、多看隔壁评论区、不要看过期的视频。Java入门想要学好编程,一定要多敲代码!建议先跟着书上的例子敲一遍代码,然后试着自......
  • Java连接RabbitMQ报错:An unexpected connection driver error occured(偶尔能连上)
    1、查看rabbitMq的状态。输入命令:rabbitmqctlstatus,发现没有报错,但是rabbit中的host是root,并不是ip地址,所以连接不上。 2、运行命令:echo【ip地址】root>>/etc/hosts。将RabbitMQ服务所在的IP地址添加到/etc/hosts中。 ......
  • 最优二叉搜索树问题(Java)
    最优二叉搜索树问题(Java)1、前置介绍2、算法设计思路2.1最优二叉搜索树的结构2.2一个递归算法2.3计算最优二叉搜索树的期望搜索代价3、代码实现4、复杂度分析5、参考资料1、前置介绍设S={x1,x2,…,xn}是有序集,且x1<x2<…<xn,表示有序集S的二叉搜索树利用二叉树的结......
  • Java面向对象编程基础
    类与对象类和对象的区别和联系类是抽象的,概念的,代表一类事物,比如人类,猫类..,即它是数据类型.对象是具体的,实际的,代表一个具体事物,即是实例.类是对象的模板,对象是类的一个个体,对应一个实例对象在内存中存在形式!字符串本质上是一个引用类型,按照jvm的规则会把字符串放在方法区的......