1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java 8 Collectors.toMap 重复key 值处理 value为null处理

java 8 Collectors.toMap 重复key 值处理 value为null处理

时间:2018-10-03 12:22:35

相关推荐

java 8 Collectors.toMap 重复key 值处理 value为null处理

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。