Java 8中的stream在项目开发中被同学们用的风生水起,当然大家也踩了不少坑。下面我就来说说Collections.toMap在项目使用中踩的坑,避免大家重复被坑。
一.介绍Collectors.toMap
Collectors.toMap 是 Java 8 中的一个收集器,它可以将流中的元素转换为 Map 对象,其中每个元素的 key 由指定的函数生成。
当我们使用 Collectors.toMap 方法时,可能会遇到重复的 key 问题,这是因为我们在将元素转化为 Map 对象时,如果两个元素具有相同的 key,则会发生冲突,抛出异常。
还可能会遇到value为null的问题,这是因为我们在将元素转化为 Map 对象时,toMap最终是调用了Map.merge方法,merge方法不允许value为null 导致的异常抛出。
二.问题复现与分析以及解决方案
1、Collectors.toMap的key重复问题
问题复现:
public static void main(String[] args) {
List<BenefitModel> benefitModelList = new ArrayList<>();
benefitModelList.add(new BenefitModel("123", "积分权益"));
benefitModelList.add(new BenefitModel("123", "现金权益"));
Map<String, String> benefitMap = benefitModelList.stream().collect(Collectors.toMap(BenefitModel::getBenefitId, BenefitModel::getBenefitName));
System.out.println(JSON.toJSONString(benefitMap));
}