可以使用 Java 8 的 Stream API 来实现这个合并操作。具体步骤如下:

  1. 将两个集合转换成 Map,以便后续根据 Material 或 BillOfMaterialComponent 来查找对应的对象。转换代码如下:
Map<String, OdsMaterialDocumentItem> splitMap = splitReleaseTotalMap.stream()
    .collect(Collectors.toMap(OdsMaterialDocumentItem::getMaterial, Function.identity()));

Map<String, OdsMaterialbomItem> shoudMap = shoudReleaseList.stream()
    .collect(Collectors.toMap(OdsMaterialbomItem::getBillOfMaterialComponent, Function.identity()));
  1. 遍历 shoudMap 的每个元素,查找对应的 splitMap 中的元素,并将它们合并起来。合并时,如果两个元素的 Material 或 BillOfMaterialComponent 相同,则将 QuantityInEntryUnit 减去 BillOfMaterialItemQuantity。合并代码如下:
List<OdsMaterialDocumentItem> result = shoudMap.values().stream()
    .map(shoudItem -> {
        OdsMaterialDocumentItem splitItem = splitMap.get(shoudItem.getBillOfMaterialComponent());
        if (splitItem != null) {
            if (splitItem.getMaterial().equals(shoudItem.getBillOfMaterialComponent())) {
                splitItem.setQuantityInEntryUnit(splitItem.getQuantityInEntryUnit() - shoudItem.getBillOfMaterialItemQuantity());
            }
            return splitItem;
        } else {
            return new OdsMaterialDocumentItem();
        }
    })
    .collect(Collectors.toList());
  1. 将结果转换成 List 返回即可。

完整代码如下:

Map<String, OdsMaterialDocumentItem> splitMap = splitReleaseTotalMap.stream()
    .collect(Collectors.toMap(OdsMaterialDocumentItem::getMaterial, Function.identity()));

List<OdsMaterialDocumentItem> result = shoudReleaseList.stream()
    .map(shoudItem -> {
        OdsMaterialDocumentItem splitItem = splitMap.get(shoudItem.getBillOfMaterialComponent());
        if (splitItem != null) {
            if (splitItem.getMaterial().equals(shoudItem.getBillOfMaterialComponent())) {
                splitItem.setQuantityInEntryUnit(splitItem.getQuantityInEntryUnit() - shoudItem.getBillOfMaterialItemQuantity());
            }
            return splitItem;
        } else {
            return new OdsMaterialDocumentItem();
        }
    })
    .collect(Collectors.toList());
Java 8 Stream API 合并两个 List 集合:基于 Material 属性的减法操作

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

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