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

     

  • 相关阅读:
    mysql8下载安装及配置
    jdk11下载安装及环境变量配置
    展示所有商品案例
    事务(转账实例)
    Part2.7 ESLint
    Part2.6 Webpack
    Part2.5 模块化开发
    Part2.4 gulp 实践
    Part2.3 Grunt
    Part2.2 plop 使用
  • 原文地址:https://www.cnblogs.com/zhangcaihua/p/14650578.html
Copyright © 2011-2022 走看看