首页 > 编程语言 >Java8新特性Stream之list转map及问题解决

Java8新特性Stream之list转map及问题解决

时间:2023-06-11 16:33:44浏览次数:45  
标签:map toMap Stream Collectors list Person println

List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap

具体用法实例如下:

//声明一个List集合

List list = new ArrayList();

list.add(new Person("1001", "小A"));

list.add(new Person("1002", "小B"));

list.add(new Person("1003", "小C"));

System.out.println(list);

//将list转换map

Map map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));

System.out.println(map);


注意:用Collectors的toMap方法转换List,一般会遇到两个问题。一个是转换map,key重复问题;另一个是空指针异常,即转为map的value是null。

问题解决!!!

一、第一种问题报的错误如下:Duplicate key

原因是声明List集合时,有的值重复,如图:

解决方法:(分三种,具体哪种看业务需求)

1.重复时用后面的value 覆盖前面的value

Map map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(key1 , key2)-> key2 ));

System.out.println(map);


2.重复时将前面的value 和后面的value拼接起来;

Map map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(key1 , key2)-> key1+","+key2 ));

System.out.println(map);


3.重复时将重复key的数据组成集合

Map> map = list.stream().collect(Collectors.toMap(Person::getId,

p -> {

getNameList = new ArrayList<>();

getNameList.add(p.getName());

return getNameList;

},

value2) -> {

value1.addAll(value2);

return value1;

}

));

System.out.println(map);


二、第二种问题报的错误如下:NullPointerException

原因是声明List集合时有的值为空(如图),但是HashMap中k,v是可以存null值的。

解决方法:在转换流中加上判空,即便value为空,依旧输出。(与上面方法三相同)

Map> map = list.stream().collect(Collectors.toMap(Person::getId,

p -> {

getNameList = new ArrayList<>();

getNameList.add(p.getName());

return getNameList;

},

value2) -> {

value1.addAll(value2);

return value1;

}

))

System.out.println(map);


标签:map,toMap,Stream,Collectors,list,Person,println
From: https://blog.51cto.com/u_16110906/6458152

相关文章

  • map.forEach使用
    //创建一个MapMap<String,Object>map=newHashMap<>();infoMap.put("a","a");infoMap.put("b","b");infoMap.put("c","c");//传统的Map迭代方式for(Map.Entry<String,Object>entry:ma......
  • STL-map(ACM)
    1.不存在的元素查询时会自动生成2.map就是一堆pair的集合,按照T1的字典序进行排列3.可以像vector那样根据下标随时访问重载函数 map<T1,T2>m;//下标的类型,值的类型//按照T1的值进行字典序排序//下方为赋值操作map<string,string>m;m["AC"]="Yee";m["Red"]=......
  • 【总结】cnmaps、maskout、salem的正确打开方式
    前言这几天在画图,需要用到白化功能,一直在搜集各位大佬的资料学习(如下)。结合自己的使用经历,给大家简单分享一下亲身体验。【自学气象人】公众号获取气象绘图——白化杂谈cnmaps,你值得拥有!python绘图|salem一招解决所有可视化中的掩膜(Mask)问题安装maskout最简单我提供一......
  • Cassandra 的数据存储结构——本质是SortedMap<RowKey, SortedMap<ColumnKey, ColumnV
    Cassandra的数据存储结构Cassandra的数据模型是基于列族(ColumnFamily)的四维或五维模型。它借鉴了Amazon的Dynamo和Google'sBigTable的数据结构和功能特点,采用Memtable和SSTable的方式进行存储。在Cassandra写入数据之前,需要先记录日志(CommitLog),然后数据开始写......
  • nas使用docker部署alist​
    一、下载镜像xhofe/alist:latest二、创建容器第一行:文件/文件夹:此处填写在nas上事先创建好的目录位置装载路径:/opt/alist/data类型选读写启动容器,检查日志是否有报错项。如没有报错,容器应该为运行中的状态。三、打开alist页面点击快捷方式查看应用网址打开alist登录页面http://192......
  • 2023年6月10日,LinkedList,Vector,Stark,HashSet
    1.List1.LinkedListLinkedList的使用packagecom.wz.linkedlist_class;importjava.util.LinkedList;publicclasstest01{publicstaticvoidmain(String[]args){LinkedList<String>list=newLinkedList<>();list.add("AA......
  • Python内置函数any()、map()组合运用案例一则
    Python内置函数any()用来测试某个可迭代对象中是否所有对象都等价于True,map()用来把一个函数映射到一个或多个可迭代对象上。问题描述:测试一个字符串中是否包含指定列表中的某个字符串作为子串,不允许使用循环结构。参考代码:......
  • unordered_map卡常
    加入头文件<chrono>加入以下哈希函数:structcustom_hash{staticuint64_tsplitmix64(uint64_tx){x+=0x9e3779b97f4a7c15;x=(x^(x>>30))*0xbf58476d1ce4e5b9;x=(x^(x>>27))*0x94d049bb133111eb;returnx^(x......
  • mapper层
    AnswerMapper.xml<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="co......
  • CF1838A-Blackboard-List
    题意简述在黑板上有两个数字,进行如下操作\(n-2\)次:每次在黑板上选择任意两个数,将两个数的差的绝对值写在黑板上。这样你会得到一个长度为\(n(3\len\le100)\)的序列。一共\(t(1\let\le100)\)组数据。每组数据给定操作后的序列,需要你还原出最初写在黑板上的......