Lambda Foreach循环成流

Lambda Foreach循环成流,lambda,foreach,java-stream,maps,Lambda,Foreach,Java Stream,Maps,在删除foreach循环并将其转换为流方面,我还有另一个问题。我将在这里发布整个方法,以防需要更多的信息,而不仅仅是foreach循环。 我已经试着用平面图来做了,但它并不能解决我的问题。我希望你们中的一些人能帮助我!我将非常感激 public void handlePickedOrders(final List<PickOrder> pickedOrders) { Contract.requires(pickedOrders != null, "ille

在删除foreach循环并将其转换为流方面,我还有另一个问题。我将在这里发布整个方法,以防需要更多的信息,而不仅仅是foreach循环。 我已经试着用平面图来做了,但它并不能解决我的问题。我希望你们中的一些人能帮助我!我将非常感激

public void handlePickedOrders(final List<PickOrder> pickedOrders) {

        Contract.requires(pickedOrders != null, "illegal argument");

        // Your code goes here - if needed

        if (error) {
            new Scanner(System.in).nextLine();
        }

        if (!pickedOrders.isEmpty()) {
            Map<String, Integer> removedProducts = pickedOrders.stream()
                            .flatMap(n -> n.getPickOrderLines().stream())
                            .collect(Collectors.toMap(s -> s.getProductCode(),
                                    p -> p.getQuantity(),
                                    (a1, a2) -> a1 + a2));
            //Problem area
            for (Map.Entry<String, Integer> entry : removedProducts.entrySet()) {
                if (error) {
                    System.out.println("Remove " + entry.getValue() + " pieces of " + entry.getKey());
                }
                quantityOnHand.replace(entry.getKey(), quantityOnHand.get(entry.getKey()) - entry.getValue());
            }
            if (error) {
                System.out.println("Remove Pick Orders " + pickedOrders + " from Queue");
            }

            pickOrders.removeAll(pickedOrders);
            for (PickOrder pickOrder : pickOrders) {
                for (String productCode : removedProducts.keySet()) {
                    if (pickOrder.containsProduct(productCode)) {
                        pickOrder.calcReplenishmentsNeeded(quantityOnHand);
                        if (error) {
                            System.out.println("Recalculating: " + pickOrder);
                        }
                        break;
                    }
                }
            }
        }
    }
public void handlePickedOrders(最终选择订单列表){
requires(pickedOrders!=null,“非法参数”);
//如果需要,您的代码将显示在此处
如果(错误){
新扫描仪(System.in).nextLine();
}
如果(!pickeOrders.isEmpty()){
Map removedProducts=pickedOrders.stream()
.flatMap(n->n.getPickOrderLines().stream())
.collect(Collectors.toMap->s.getProductCode(),
p->p.getQuantity(),
(a1,a2)->a1+a2);
//问题领域
对于(Map.Entry:removedProducts.entrySet()){
如果(错误){
System.out.println(“删除”+entry.getValue()+“+entry.getKey()的片段”);
}
替换(entry.getKey(),quantityOnHand.get(entry.getKey())-entry.getValue());
}
如果(错误){
System.out.println(“从队列中删除提货单”+提货单+”;
}
pickOrders.removeAll(pickedOrders);
对于(PickOrder PickOrder:pickOrders){
for(字符串productCode:removedProducts.keySet()){
if(pickOrder.containsProduct(productCode)){
pickOrder.CalCreplenishments需要(现有数量);
如果(错误){
System.out.println(“重新计算:+pickOrder”);
}
打破
}
}
}
}
}

虽然我还没有得到确切的问题陈述,但您可以尝试您正在寻找的这种嵌套foreach循环。 我希望它能帮到你。

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        List<PickOrder> pickedOrders = Arrays.asList(
           new PickOrder("pc1",1000),
           new PickOrder("pc2",2000),
           new PickOrder("pc3",3000),
           new PickOrder("pc4",4000),
           new PickOrder("pc5",5000)
        );

        List<PickOrder> pickOrders = Arrays.asList(
                new PickOrder("pc6",6000),
                new PickOrder("pc7",7000),
                new PickOrder("pc8",8000)
        );

        Map<String, Integer> removedProducts = new HashMap<>();
        removedProducts.put("pc1",1000);
        removedProducts.put("pc2",2000);
        removedProducts.put("pc3",3000);

        pickOrders.forEach( pickOrder -> removedProducts.keySet().forEach(rp -> {
            if(pickOrder.getProductCode().equals(rp)) {
                //pickOrder.calcReplenishmentsNeeded(quantityOnHand);
                /*if (error) {
                    System.out.println("Recalculating: " + pickOrder);
                }*/
            }
        }));
    }
谢谢
Girdhar

慢点,从一个没有跟随你的冒险经历、没有背景的人的角度重新阅读你的问题。另外,描述您的问题可能会有所帮助(错误消息?发生意外情况?)。请仔细阅读中的提示,然后回答您的问题。对不起!上面的代码工作得非常好。我只需要把我的foreach循环变成溪流。没有错误或任何东西。我只需要把它们变成小溪。
public class PickOrder {

    private String productCode;
    private int quantity;

    public PickOrder(String productCode, int quantity) {
        this.productCode = productCode;
        this.quantity = quantity;
    }

    public String getProductCode() {
        return productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
}