Map<String, List<BscBarcodeBo>> map 去重累加
时间: 2023-05-26 21:05:05 浏览: 144
map转化为list
5星 · 资源好评率100%
您可以使用Java 8 Stream API中的groupingBy和mapping方法,结合Collectors.toSet和Collectors.summingInt方法来实现去重累加。具体代码如下:
```java
Map<String, List<BscBarcodeBo>> map; // 原始Map
Map<String, Integer> resultMap = map.values().stream()
.flatMap(List::stream)
.collect(Collectors.groupingBy(BscBarcodeBo::getBarcode,
Collectors.mapping(BscBarcodeBo::getNum,
Collectors.toSet())))
.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().stream().mapToInt(Integer::intValue).sum()));
// resultMap的key是去重之后的barcode,value是对应的num累加结果。
```
步骤解释:
1. 首先将原始Map中所有BscBarcodeBo对象拆分出来,形成一个大的Stream。
2. 使用groupingBy方法按照BscBarcodeBo对象的barcode字段进行分组。
3. 针对每个分组,在mapping方法中指定BscBarcodeBo对象的num字段作为要做去重累加的字段,然后使用toSet方法进行去重(因为去重后是一个Set,所以使用toSet方法)。
4. 最后得到的结果是一个Map,key值是去重后的barcode,value是一个Set,包含了要做去重累加的所有num值。
5. 对于以上结果中的每一个entry,将entry的value转化为一个IntStream,然后调用sum方法对其进行累加操作。最终得到的结果就是每个barcode对应的num累加结果。
阅读全文