stream转map,重复key的处理

用stream转map很容易碰到key重复的情况,具体的处理方式可以取决于具体业务。看到有篇举例得较详细的文章,记录一波:java8 对象转map时重复key Duplicate key xxxx

上文主要列举三种处理方式:
1.后值覆盖前值:

Map<String, String> map = list.stream().collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName, 
	(value1, value2 )->{ 
            return value2; 
	}));

//或者简写

Map<String, String> map = list.stream().collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName, 
	(key1 , key2)-> key2 ));

2.后值累加前值或处理:

Map<String, String> map = list.stream().collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName, 
	(key1 , key2)-> key1 + "," + key2 ));
 
输出:
{一年级三班=翠花,香兰, 一年级二班=小明,小芳,小华}

3.按重复的key再分组处理:

Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Student :: getClassName, 
    // 此时的value 为集合,方便重复时操作
    s ->  {
	List<String> studentNameList = new ArrayList<>();
	studentNameList.add(s.getStudentName());
	return studentNameList;
    }, 
    // 重复时将现在的值全部加入到之前的值内
    (List<String> value1, List<String> value2) -> {
	value1.addAll(value2);
	return value1;
    }
));
 
输出:
{一年级三班=[翠花, 香兰], 一年级二班=[小明, 小芳, 小华]}

详情见原文!

补充:

1.按时间逆序:

//按时间逆序
resList.sort(Comparator.comparing(PositionChangesAppDTO::getCreateTime).reversed());
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值