常用方式

1.利用Collectors.toMap方法进行转换

public Map<Long, String> getIdNameMap(List<Account> accounts) {return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));
}

其中第一个参数就是可以,第二个参数就是value的值。

2.收集对象实体本身

  • 在开发过程中我们也需要有时候对自己的list中的实体按照其中的一个字段进行分组(比如 id ->List),这时候要设置map的value值是实体本身。

    public Map<Long, Account> getIdAccountMap(List accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account));
    }

account -> account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法 Function.identity(),这个方法返回自身对象,更加简洁

重复key的情况。

在list转为map时,作为key的值有可能重复,这时候流的处理会抛出个异常:Java.lang.IllegalStateException:Duplicate key。这时候就要在toMap方法中指定当key冲突时key的选择。(这里是选择第二个key覆盖第一个key)

public Map<String, Account> getNameAccountMap(List<Account> accounts) {return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2));}

3.用groupingBy 或者 partitioningBy进行分组

根据一个字段或者属性分组也可以直接用groupingBy方法,很方便。

Map<Integer, List<Person>> personGroups = Stream.generate(new PersonSupplier()).limit(100).collect(Collectors.groupingBy(Person::getAge));
Iterator it = personGroups.entrySet().iterator();
while (it.hasNext()) {Map.Entry<Integer, List<Person>> persons = (Map.Entry) it.next();System.out.println("Age " + persons.getKey() + " = " + persons.getValue().size());
}

partitioningBy可以理解为特殊的groupingBy,key值为true和false,当然此时方法中的参数为一个判断语句(用于判断的函数式接口)

Map<Boolean, List<Person>> children = Stream.generate(new PersonSupplier()).limit(100).collect(Collectors.partitioningBy(p -> p.getAge() < 18));
System.out.println("Children number: " + children.get(true).size());
System.out.println("Adult number: " + children.get(false).size());

原文链接:https://blog.csdn.net/miaoye520/article/details/122586801

Java8中list转map方法相关推荐

  1. Java8中list转map方法总结

    背景 在最近的工作开发之中,慢慢习惯了很多Java8中的Stream的用法,很方便而且也可以并行的去执行这个流,这边去写一下昨天遇到的一个list转map的场景. list转map在Java8中str ...

  2. java8中新判空方法之Optional类的使用

    Optional来简化代码同时高效处理NPE(Null Pointer Exception 空指针异常) 认识Optional Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用, ...

  3. [vue] Vuex中四个map方法的使用 mapState mapGetters mapActions mapMutations

    1. mapState方法: 用于帮助我们映射state中的数据为计算属性 computed: {//借助mapState生成计算属性:sum.school.subject(对象写法)...mapSt ...

  4. dart中list的map方法获取index

    dart map获取index 只需要index list.asMap().keys.map((index) { return something; } List<String> list ...

  5. java 8 string_String.join() --Java8中String类新增方法

    /*** Returns a new String composed of copies of the * {@codeCharSequence elements} joined together w ...

  6. java8中的map与flatmap区别

    map:只能返回一个值 flatmap:返回多个值 new ArrayList().stream().map(x -> x);//返回一个 new ArrayList().stream().fl ...

  7. 通过stream去重_分享几种 Java8 中通过 Stream 对列表进行去重的方法

    几种列表去重的方法 在这里我来分享几种列表去重的方法,算是一次整理吧,如有纰漏,请不吝赐教.1. Stream 的distinct()方法 distinct()是Java8中 Stream 提供的方法 ...

  8. 如何正确的使用Java8中的Optional类来消除代码中的null检查

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:一书生VOID lw900925.github.io/jav ...

  9. python3.x pool.map方法的实质

    我使用多进程的一般方式,都是multiprocessing模块中的Pool.map()方法.下面写一个简单的示例和解析.至于此种方法使用多进程的效率问题,还希望大佬予以指正. 示例: "&q ...

  10. 使用Java8中的Optional类来消除代码中的null检查

      作者:一书生VOID lw900925.github.io/java/java8-optional.html Optional类是Java 8新增的一个类,用以解决程序中常见的NullPointe ...

最新文章

  1. 用html编写一个贪吃蛇,HTML编写的贪吃蛇代码
  2. php mysql备份脚本_MySQL备份脚本,mysql脚本
  3. mysql 子sql中调用存储过程_mysql 子sql中调用存储过程
  4. 【Cson原创】javascript中length属性的探索
  5. php对称算法_php里简单的对称加密算法
  6. Tomcat中web.xml文件的详细说明
  7. vue 中 Excel 的导入导出
  8. pytorch---之halfTensor
  9. 使用idea练习springmvc时,出现404错误总结
  10. 如何用C++做一个简单的QQ整人程序
  11. 数据库创建常用SQL语句
  12. html打印预览空白,打印预览空白,网页打印空白原因及解决办法汇总
  13. 市政管理学(试题及答案)汇总
  14. matlab编写正弦波mif,使用MATLAB一键制作mif文件
  15. 基于ESP32的智能鱼缸系统
  16. GPT分区表的备份与恢复
  17. 第三章总体均数的估计与假设检验(2)
  18. php 验证手机号码格式
  19. mysql no space_故障处理,no space left on device!几种可能性?
  20. Excel学习日记:L12-打印分页

热门文章

  1. Snagit 10 截图 虚拟打印机 【下载|注册码】
  2. 做教学直播时,如何做PPT课件直播?
  3. 数据库实验五-数据库设计实验
  4. Froala editor 2.9.5 使用
  5. python 典型相关分析_典型关联分析(CCA)原理
  6. 计算机网络之对称密钥加密与非对称密钥加密
  7. SQL2005安装出错
  8. 火车头采集器小狗伪原创插件
  9. 【MATLAB】MATLAB三维曲面绘制【详细教程】
  10. lm324 -4运放-运算放大器