Collectors.toMap方法value值不支持为null

Collectors.toMap(),key可以为null,但value不能为null,否则抛 空指针异常 NullPointerException

解决方案

  1. 使用Optional类处理value,优点是可以继续使用Collectors.toMap,缺点是为null的value会被改,而这可能违反业务上的期望。
    collection.stream().collect(Collectors.toMap(AccountBaseDTO::getAccountId, accountBaseDTO -> Optional.ofNullable(accountBaseDTO.getAccountType()).orElse("")));
    
  2. 使用 Stream#collect(java.util.function.Supplier, java.util.function.BiConsumer<R,? super T>, java.util.function.BiConsumer<R,R>)方法,可以保留为null的value
    list.stream().collect(HashMap::new, (map, item) -> map.put(item.getAccountId(), item.getAccountType()),HashMap::putAll);