Java 8 Stream API 合并两个 List 集合:基于 Material 属性的减法操作
可以使用 Java 8 的 Stream API 来实现这个合并操作。具体步骤如下:
- 将两个集合转换成 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()));
- 遍历 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());
- 将结果转换成 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());
原文地址: https://www.cveoy.top/t/topic/oDIi 著作权归作者所有。请勿转载和采集!