java8 利用stream合并ListOdsMaterialDocumentItem items 中字段material相同的数量quantityInEntryUnit字段quantityInEntryUnit为string不能损失精度并且结果还是为List对象
可以使用Java 8中的Stream API,结合Collectors.groupingBy()和Collectors.summingInt()方法实现该功能。
具体代码如下:
List<OdsMaterialDocumentItem> mergedItems = items.stream()
.collect(Collectors.groupingBy(OdsMaterialDocumentItem::getMaterial,
Collectors.summingInt(item -> Integer.parseInt(item.getQuantityInEntryUnit()))))
.entrySet().stream()
.map(entry -> new OdsMaterialDocumentItem(entry.getKey(), String.valueOf(entry.getValue())))
.collect(Collectors.toList());
这段代码首先利用groupingBy()方法将items按照material字段分组,然后利用summingInt()方法对每组中的quantityInEntryUnit字段进行求和,得到一个Map<String, Integer>对象,其中key为material,value为quantityInEntryUnit的和。
接着利用entrySet()方法将Map转化为Set,然后再利用Stream API中的map()方法将Set中的每个元素映射为一个新的OdsMaterialDocumentItem对象,最后再利用toList()方法将结果转化为List。在映射的过程中,将material字段设为entry的key,将quantityInEntryUnit字段设为entry的value,并将value转化为String类型,以保留精度。
这样,就能得到按照material字段合并后的List
原文地址: https://www.cveoy.top/t/topic/ht3U 著作权归作者所有。请勿转载和采集!