zoukankan      html  css  js  c++  java
  • 关于使用stream将list转map时,key重复导致报错问题

    要将List对象集合转为map集合,可以通过stream流的形式快速实现转换:

    //三个Users对象组成一个List集合
    List<Users> list = new ArrayList<>();
    list.add(Users.builder().userName("11").userId(1).build());
    list.add(Users.builder().userName("11").userId(2).build());
    list.add(Users.builder().userName("33").userId(3).build());
    
    //将list转map
    Map<String, Users> usersMap = list.stream()
        .collect(Collectors.toMap(Users::getUserName, user -> user));
    System.out.println(usersMap.get("11"));

    但是上述代码运行后报了异常:

    意思为map中出现了重复的key,也就是说通过上述方法转map时,出现重复key并不会出现覆盖的情况,而是再次在map中添加一个重复的key,导致报错。

    所以通过stream实现list转map时,要实现重复的key会被覆盖,可以使用Function.identity()方法:

    //三个Users对象组成一个List集合
    List<Users> list = new ArrayList<>();
    list.add(Users.builder().userName("11").userId(1).build());
    list.add(Users.builder().userName("11").userId(2).build());
    list.add(Users.builder().userName("33").userId(3).build());
    
    //将list转map,这里是出现重复key时,覆盖前一个
    Map<String, Users> usersMap = list.stream()
        .collect(Collectors.toMap(Users::getUserName, Function.identity(), (user1, user2) -> user2));
    System.out.println(usersMap.get("11"));
    //输出结果:
    edu.nf.ch08.entity.Users@41aaedaa

     

  • 相关阅读:
    如何写一个完整课堂管理系统(数据库增删改查)
    关于java异常处理的思考
    java03类与对象相关问题
    java02实验:方法
    java02动手动脑
    java课堂动手动脑及课后实验总结
    java测试银行系统源代码
    JAVA程序系统测试感受
    2018年第八周暑假进度报告
    2018第七周进度总结报告
  • 原文地址:https://www.cnblogs.com/zhangcaihua/p/14650578.html
Copyright © 2011-2022 走看看