首页 > 其他分享 >把List变为map,并遇到重复值时自动过滤、并返回有序map

把List变为map,并遇到重复值时自动过滤、并返回有序map

时间:2023-12-14 11:55:33浏览次数:31  
标签:值时 map Student List key new 83 zhangsan

Student:

    @Data
    @AllArgsConstructor
    public class Student {
        private String name;
        private Integer age;
        private Integer score;
    }

把list转成map

        List<Student> students = List.of(
                new Student("zhangsan", 20, 80),
                new Student("zhangsan", 20, 81),
                new Student("lisi", 21, 82),
                new Student("wangwu", 20, 83),
                new Student("zhaoliu", 20, 83)
        );

        Map<String, Integer> scoreMap = students.stream()
                .collect(Collectors.toMap(
                        Student::getName,
                        Student::getScore
                ));
        System.out.println("scoreMap = " + scoreMap); // 报 `java.lang.IllegalStateException: Duplicate key zhangsan (attempted merging values 80 and 81)`

遇重复key时,两个value就会导致报错。

遇到list里有重复key时报错的解决方法:

        // 遇重复key, 取第一个value
        Map<String, Integer> scoreMap2 = students.stream()
                .collect(Collectors.toMap(
                        Student::getName,
                        Student::getScore,
                        (score1, score2) -> score1
                ));
        System.out.println("scoreMap2 = " + scoreMap2);

运行正常,打印结果:scoreMap2 = {lisi=82, zhaoliu=83, zhangsan=80, wangwu=83}

扩展:如果想让map有序,即map key序列与list一致,如何实现?

如下:

        // 遇重复key, 取第一个value,并按list里的序列生成map
        Map<String, Integer> scoreMap3 = students.stream()
                .collect(Collectors.toMap(
                        Student::getName,
                        Student::getScore,
                        (score1, score2) -> score1,
                        LinkedHashMap::new
                ));
        System.out.println("scoreMap3 = " + scoreMap3);

打印结果:scoreMap3 = {zhangsan=80, lisi=82, wangwu=83, zhaoliu=83}

标签:值时,map,Student,List,key,new,83,zhangsan
From: https://www.cnblogs.com/jiayuan2006/p/17900909.html

相关文章

  • Java-研究HashMap的源码
    Java-研究HashMap的源码JDK版本:17类注释基于哈希表的Map接口实现。此实现提供了所有可选的映射操作,并允许null值和null键。(HashMap类大致相当于Hashtable,只不过它是不同步的并且允许null。)该类不保证映射的顺序;特别是,它不保证顺序随着时间的推移保持不变。此实现为基本操......
  • Redis数据结构4:REDIS_ZIPLIST
    REDIS_ZIPLISTzipList(压缩列表)是一种紧凑型的数据结构,占用一片连续的内存,本质上是一个字节数组。能提高CPU缓存的利用效率,并且针对不同数据结构进行不同编码,节省内存开销。编码结构zipList的字节数组主要由5个部分组成:zlbytes、zltail、zllen、zltail和entry。zlbytes记录......
  • js中数组map和集合map
    js中数组的map:使用情况:想要对一个数组进行操作,然后又不想改变原来的数组数据,还想基于原来数组的数据进行改造,那么可以使用map写法一:letarr=[1,2,3,4]letnewArr=arr.map(item=>{return++item})console.log(newArr,arr)//输出[2,3,4,5][1,2,3,4]letarr=[1......
  • A fast and simple algorithm for training neural probabilistic language models
    目录概NoisecontrastiveestimationMnihA.andTehY.W.Afastandsimplealgorithmfortrainingneuralprobabilisticlanguagemodels.ICML,2012.概NCE用在语言模型的训练上.Noisecontrastiveestimation给定context\(h\),下一个词为\(w\)的条件概率按......
  • Nmap
    Nmap是一个常用的网络扫描工具,可以用来识别网络上的主机和服务,以及检测网络安全漏洞。使用Nmap进行网络扫描时,需要注意以下几个方面:扫描目标:需要确定扫描的目标IP地址或主机名,以及扫描的端口范围。扫描类型:可以选择不同的扫描类型,包括TCP、UDP、SYN等,以适应不同的网络环境和需求......
  • 【一个队列实现栈】Java队列——Queue接口-LinkedList实现类
    leetcode225.用队列实现栈题意:用一个队列实现栈题解:(1)弹栈:将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,然后弹出(2)获取栈顶元素:先将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,此时队头元素即为栈顶元素;然后再重新循环siz......
  • 无涯教程-MFC - List Control函数
    列表视图控件的功能,该控件显示项目的集合,每个项目由一个图标和一个标签组成,它由CListCtrl类表示,列表控件包括使用以下视图显示项目列表。IconsSmallIconsListReport让无涯教程通过创建一个新的基于MFC对话框的应用程序来研究一个简单的示例。步骤1-删除TODO行并拖动一......
  • 什么是POP3、SMTP及IMAP?SMTP服务器?
    POP3、SMTP和IMAP是用于电子邮件传输和访问的三种不同协议。它们分别负责电子邮件的接收(POP3)、发送(SMTP)和远程访问(IMAP)。下面是对每个协议的简要解释:POP3(PostOfficeProtocolversion3):POP3是一种用于接收电子邮件的协议。它允许用户从服务器上下载并存储邮件到本地设备,通常在......
  • vant列表下拉刷新、上拉加载|list使用方法
    Vant列表list使用方法Vant列表list的使用方法和注意事项下列代码为允许下拉刷新1.使用组件<van-pull-refreshv-model="refreshing"@refresh="onRefresh"><van-listv-model="loading":finished="finished"......
  • springboot listener、filter登录实战
    转载自:www.javaman.cn博客系统访问:http://175.24.198.63:9090/front/index登录功能1、前端页面采用的是layui-admin框架,文中的验证码内容,请参考作者之前的验证码功能<!DOCTYPEhtml><htmllang="zh"xmlns:th="http://www.thymeleaf.org"><head><title>ds博客</tit......