【问题标题】:nested foreach loops with return expression into stream带有返回表达式的嵌套 foreach 循环到流中
【发布时间】:2021-02-22 13:38:46
【问题描述】:

将嵌套的 for each 循环转换为流时遇到问题。

for (PickOrder pickOrder : pickOrders) {
    for (PickOrderLine pickOrderLine : pickOrder.getPickOrderLines()) {
        if (pickOrderLine.getQuantity() > quantityOnHand.get(pickOrderLine.getProductCode())) {
            return productCollection.findByCode(pickOrderLine.getProductCode());
        }
    }
}

这是我的 for each 循环,我想将其转换为流。我试过了:

pickOrders.stream()
    .flatMap(pickOrder -> pickOrder.getPickOrderLines().stream())
    .filter(pickOrderLine -> pickOrderLine.getQuantity() > quantityOnHand.get(pickOrderLine.getProductCode()))
    .findFirst();

这种方式不起作用,我非常感谢您的提示和帮助!谢谢

【问题讨论】:

  • 它应该可以工作。您在第二次 sn-p 中究竟返回了什么?

标签: java lambda java-stream


【解决方案1】:

还不能评论要求澄清,所以我会发布一个答案:

看起来这应该可以工作。但是,for 循环中唯一不在流中的是 return 语句 productCollection.findByCode(pickOrderLine.getProductCode())

你可以这样搭配:

pickOrders.stream()
                .flatMap(pickOrder -> pickOrder.getPickOrderLines().stream())
                .filter(pickOrderLine -> pickOrderLine.getQuantity() > quantityOnHand.get(pickOrderLine.getProductCode()))
                .map(pickOrderLine -> productCollection.findByCode(pickOrderLine.getProductCode()))
                .findFirst();

【讨论】:

  • 不错!很高兴听到!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多