1、重复key处理
public static void main(String[] args) {
// 查询客户主证件信息 代码省略
// 获取客户证件列表
List<Map<String,Object>> custCertificateList = (List<Map<String, Object>>) idenMap.get("custCertificateList");
// 将证件以客户维度封装,该写法如果一个客户出现多个主证件信息,会报错。
Map<String,Map<String,String>> custIdenMap = custCertificateList.stream().collect(Collectors.toMap(e -> (String) e.get("custNo"), e -> UtilMisc.toMap("idType", (String) e.get("idType"), "idNo", (String) e.get("idNo")));
// 为防止以上错误,可用下面写法:添加(oldData,newData)->oldData) ,出现重复值,用第一个值
Map<String,Map<String,String>> custIdenMap = custCertificateList.stream().collect(Collectors.toMap(e -> (String) e.get("custNo"), e -> UtilMisc.toMap("idType", (String) e.get("idType"), "idNo", (String) e.get("idNo")),(oldData,newData)->oldData));
}
2、Collectors.toMap 时,key可以为null,但 value不能为null
Collectors.toMap 时,key可以为null,但 value不能为null, 否则抛空指针异常nullPointerException
原因说明:
Collectors.toMap调用的Map.merge方法,该方法中value不能为空。
如果此时使用如下代码,出现birthDate为null的情况,则会报错。
解决办法:
1、既然时merge方法造成的,那就不调merge方法。 我们用自己定义的accumulator,用Stream的另一个collect方法
<R> R collect(Supplier<R> supplier,
BiConsumer<R, ? super T> accumulator,
BiConsumer<R, R> combiner);
修改后代码:
当然(map1,map2)->map1.putAll(map2)
也可以简化成HashMap::putAll