list转为map

list转为maplist转为map

大家好,又见面了,我是你们的朋友全栈君。

常用方式

代码如下:

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

收集成实体本身map

代码如下:

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

account -> account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法代替,使整个方法更简洁优雅:

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

重复key的情况

代码如下:

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

这个方法可能报错(java.lang.IllegalStateException: Duplicate key),因为name是有可能重复的。toMap有个重载方法,可以传入一个合并的函数来解决key冲突问题:

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

这里只是简单的使用后者覆盖前者来解决key重复问题。

指定具体收集的map

toMap还有另一个重载方法,可以指定一个Map的具体实现,来收集数据:

public Map<String, Account> getNameAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea2022.01.13永久激活码【2021免费激活】「建议收藏」

    (idea2022.01.13永久激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月31日
    70
  • 信道带宽_信道和带宽的关系

    信道带宽_信道和带宽的关系信道包括模拟信道和数字信道。在模拟信道,带宽按照公式W=f2-f1计算;数字信道的带宽为信道能够达到的最大数据速率,两者可通过香农定理互相转换。码元:数字信号中每一个符号的通称。即可以用二进制表示,也可以用其它进制的数表示(例如二进制就是0和1表示两个符号,四进制就是0、1、2和3表示四个符号。四进制又可以用二进制表示,00、01、10、11)。码元传输速率,又称为码元速率或传码率。码元…

    2022年10月11日
    4
  • 据说年薪30万的Android程序员必须知道的帖子「建议收藏」

    据说年薪30万的Android程序员必须知道的帖子「建议收藏」Android中国开发精英目前包括:  Android开源项目第一篇——个性化控件(View)篇    包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、FlipView、ColorPickView、GraphV

    2022年6月14日
    115
  • SpringBoot——MybatisPlus条件查询

    SpringBoot——MybatisPlus条件查询SpringBoot——MybatisPlus条件查询

    2022年4月23日
    166
  • 并发编程面试题(2020最新版)「建议收藏」

    文章目录基础知识并发编程的优缺点为什么要使用并发编程(并发编程的优点)并发编程有什么缺点并发编程三要素是什么?在Java程序中怎么保证多线程的运行安全?并行和并发有什么区别?什么是多线程,多线程的优劣?线程和进程区别什么是线程和进程?进程与线程的区别什么是上下文切换?守护线程和用户线程有什么区别呢?如何在Windows和Linux上查找哪个线程cpu利用率最高?什么是线程死锁形成死锁的…

    2022年4月18日
    41
  • ViewPager 2 使用讲解「建议收藏」

    ViewPager 2 使用讲解「建议收藏」之前早有耳闻Google为我们提供新的控件来替换老旧的ViewPager进而解决一些不好解决的bug问题,巴拉巴拉一大堆,就是前因后果啥的…相信读者已经在“张鸿洋”大神、“郭霖”大神或者是其他Android大佬的公众号那里看见了许许多多了,或许各位感觉很无聊了,笔者菜鸟,分析不了历史背景,也不是很懂源码,但是小菜鸟,可以带给位看官尝个鲜,教你怎么用,怎么上手哈,闲话不多说,我们步入正题。…

    2022年7月22日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号