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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值