Stream流转map时,key对应多个值的处理

通常使用stream流转为map的方法为Collectors.toMap

具体示例如下:


List<Student> list = new ArrayList();  
        list.add(new Student("0001", "学生甲"));  
        list.add(new Student("0002", "学生乙"));  
        list.add(new Student("0003", "学生丙"))
//转为map
Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getId, Student::getName));
System.out.println(map);

输出结果为:
0001=学生甲,0002=学生乙,003=学生丙

上述为一个key对应一个value,以下为一个key对应多个value情况

List<Student> list = new ArrayList();  
        list.add(new Student("0001", "学生甲"));  
        list.add(new Student("0002", "学生乙"));  
        list.add(new Student("0001", "学生丙"))

直接转map会产生异常,转换map时,key重复
转为map有三种方法:
1.后面的value覆盖以前的value值

Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getId, Student::getName,(key1 , key2)-> key2 ));
System.out.println(map);

输出结果为:{0001=学生丙,0002=学生乙}

2.同一key的value值进行拼接

Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getId, Student::getName,(key1 , key2)-> key1+","+key2 ));
System.out.println(map);

输出结果为:{0001=学生甲,学生丙,0002=学生乙}

3.同一key的value转为list

Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Student::getId,
	    		p ->  {
	    		 	List<String> getNameList = new ArrayList<>();
	    		 		getNameList.add(p.getName());
	    		 		return getNameList;
	    		 	},
    		     	(List<String> value1, List<String> value2) -> {
    		     		value1.addAll(value2);
    		     		return value1;
    		     	}
	    		 ));
      
         System.out.println(map);

输出结果为:{0001=[学生甲,学生丙],0002=[学生乙]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值