理解Stream collect toMap的三个参数
结论toMap的方法更易读// 写法1Collectors.toMap(DetailSkuDTO::getSkuId,// 1. 用 skuId 当柜子标签Function.identity(),// 2. 把整个 DetailSkuDTO 对象放进柜子(existing,replacement)-existing// 3. 如果标签撞了我只要先来的那个去重)//写法2// 这种方法固定了在key相同的时候放最后一个元素进去而toMap可以在key相同时做其他操作MapLong,DetailSkuDTOskuIdSkuDTOMapskuDTOList.stream().collect(HashMap::new,(map,item)-map.put(item.getSkuId(),item),HashMap::putAll);toMap的第三个参数的写法保留新值覆盖旧值后来的居上(existing,replacement)-replacement业务场景流里的数据按时间排过序了后面的数据是最新的我想用最新的覆盖老数据。保留旧值先到先得常用于去重(existing,replacement)-existing业务场景就像你代码里写的我只想知道这个 skuId 第一次出现时对应的信息后面再出现相同 skuId 的我统统不要。这就是去重的标准写法。合并两者新旧我都要// 假设 value 是个数字我想把相同 key 的数字加起来(existing,replacement)-existingreplacement业务场景统计词频或者合并相同 Key 的金额。抛出异常绝不允重复(existing,replacement)-{thrownewIllegalStateException(发现了重复的Key);}业务场景理论上数据不应该有重复一旦重复说明数据源脏了必须让程序立刻报错停机而不是悄悄忽略。