【案例分享】stream流list转map常见错误

119 阅读1分钟

领导:[一张模糊到极点的日志截图]
我:。。。糊成这样咋看,我已经联系实施让他给我重新发日志了
领导:快点搞快点搞,人家都打好几个电话了


于是,根据单词的形状,勉强看出日志中是个Duplicate key com.xxx.xxx 在代码的某一行

写法如下:

Map<String, obj> map = list.stream().collect(Collectors.toMap(dto::getYYY, dto::getXXX));

问题找到了,同事在开发的时候,想着数据YYY在业务上是唯一的数据,就直接这么写了,但是我们系统并未对此字段的唯一性做强校验,所以在生产上面,这里可能会出现重复数据,也可能出现多行为空的情况
解决方案如下:
这种没有强校验唯一的情况下,处于对代码健壮性的考虑,需要加上重复key的处理规则:
(k, v) -> k :不覆盖
(k, v) -> v :直接覆盖旧的key

Map<String, obj> map = list.stream().collect(Collectors.toMap(dto::getYYY, dto::getXXX,(k,v) -> k) ));