可以使用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对象了

java8 利用stream合并ListOdsMaterialDocumentItem items 中字段material相同的数量quantityInEntryUnit字段quantityInEntryUnit为string不能损失精度并且结果还是为List对象

原文地址: https://www.cveoy.top/t/topic/ht3U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录