可以使用Java 8中的Stream API来解决这个问题。\n\n首先,我们可以使用flatMap方法将shoudReleaseList中的每个元素转换为一个新的Stream对象,其中每个元素表示一个Map对象,包含BillOfMaterialComponent和BillOfMaterialItemQuantity属性。\n\n然后,我们可以使用forEach方法遍历这个新的Stream对象,将其中的每个Map对象合并到splitReleaseTotalMap中。如果其中的Map对象的BillOfMaterialComponent属性与splitReleaseTotalMap中的Material属性相同,就将QuantityInEntryUnit属性减去BillOfMaterialItemQuantity属性。\n\n下面是示例代码:\n\njava\nsplitReleaseTotalMap.stream()\n .flatMap(item -> shoudReleaseList.stream()\n .map(bomItem -> {\n Map<String, Object> map = new HashMap<>();\n map.put("BillOfMaterialComponent", bomItem.getBillOfMaterialComponent());\n map.put("BillOfMaterialItemQuantity", bomItem.getBillOfMaterialItemQuantity());\n return map;\n }))\n .forEach(bomMap -> {\n String component = (String) bomMap.get("BillOfMaterialComponent");\n Double quantity = (Double) bomMap.get("BillOfMaterialItemQuantity");\n Optional<OdsMaterialDocumentItem> odsItem = splitReleaseTotalMap.stream()\n .filter(item -> item.getMaterial().equals(component))\n .findFirst();\n if (odsItem.isPresent()) {\n OdsMaterialDocumentItem item = odsItem.get();\n item.setQuantityInEntryUnit(item.getQuantityInEntryUnit() - quantity);\n }\n });\n\n\n在这段代码中,我们使用flatMap方法将splitReleaseTotalMap中的每个元素与shoudReleaseList中的每个元素(即一个BOM子项)进行组合,生成一个新的Stream对象。这个新的Stream对象中的每个元素都是一个Map对象,包含BillOfMaterialComponent和BillOfMaterialItemQuantity属性。\n\n然后,我们使用forEach方法遍历这个新的Stream对象,将其中的每个Map对象合并到splitReleaseTotalMap中。如果其中的Map对象的BillOfMaterialComponent属性与splitReleaseTotalMap中的Material属性相同,就将QuantityInEntryUnit属性减去BillOfMaterialItemQuantity属性。这个操作使用了Stream中的filter和findFirst方法来查找与当前BOM子项对应的splitReleaseTotalMap中的元素。\n\n需要注意的是,这段代码中使用了Optional类来处理可能不存在的元素。这是Java 8中的一个新特性,可以避免NullPointerException等异常。

Java 8 Stream API 合并两个 List 集合并减去数量

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

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