处理列表时 Java 中的 lambda 函数出错

Error in lambda function in Java while handling list

我最近从 C++ 切换到 Java 并且面临着处理语法和 lambda 函数的艰难时期。所以有一种方法得到了更新。我很困惑相应地编辑代码。

所以最初 getCostChangeDtl() 用于 return CostChangeDtl 类型的数据,但现在相同的方法 return 是 CostChangeDtl 的列表。所以我做了一些相应的更改仍然面临一些问题。

之前

costChangeDetails.forEach(
            costChangeDetail -> changeDtls.addAll(costChangeDetail.getItems().stream().map(item -> {
                CostChangeDtl despCostChangeDtl = getCostChangeDtl(ccd, costChangeDetail, item,
                    metrics);
                        
                            if (despCostChangeDtl.getItemID() == null)
                            {
                                String consumerGtin = item.item.getConsumerDetails().getConsumerGtin();
                                missingSkuGtins.add(
                                        format("%s | %s ", consumerGtin, costChangeDetail.getLocation().getId()));
                            }
                        
                        return despCostChangeDtl;
                    }).filter(despCostChangeDtl -> despCostChangeDtl.getItemID() != null)
                .collect(Collectors.toList())));

之后

costChangeDetails.forEach(
            costChangeDetail -> changeDtls.addAll(costChangeDetail.getItems().stream().map(item -> {
                List<CostChangeDtl> despCostChangeDtl = getCostChangeDtl(ccd, costChangeDetail, item,
                    metrics);
                        for (CostChangeDtl costChangeDtl : despCostChangeDtl) {
                            if (costChangeDtl.getItemID() == null)
                            {
                                String consumerGtin = item.item.getConsumerDetails().getConsumerGtin();
                                missingSkuGtins.add(
                                        format("%s | %s ", consumerGtin, costChangeDetail.getLocation().getId()));
                            }
                        }
                        return despCostChangeDtl;
                    }).filter(despCostChangeDtl -> despCostChangeDtl.getItemID() != null)
                .collect(Collectors.toList())));

现在,我在 despCostChangeDtl.getItemID() 中收到了预期的错误,因为 despCostChangeDtl 现在是一个列表。 如何解决这个特定问题?

despCostChangeDtl 从一个对象到一个列表,所以你应该在映射之后进行平面映射。