如何使用Java Streams从Engine类型的List更新Car类型的List的Engine属性

时间:2016-07-12 20:41:57

标签: java java-8 java-stream

我的List类型为Car

public class Car {
    private String make;
    private String model;
    private Engine engine;
    //getters and setters below...
}

我想从我拥有的引擎列表中更新Engine中每个Car的{​​{1}}属性。使用for循环,我将通过以下方式实现此目的:

List

如何使用Java Streams完成相同的逻辑?

如果您有更好标题的建议,请分享。

2 个答案:

答案 0 :(得分:3)

在我看来,for loop更具可读性,但这也可以做到这一点。

if (myListOfCars.size() == myListOfEngines.size()) {
    IntStream.range(0, myListOfCars.size())
        .forEach(
            i -> myListOfCars.get(i).setEngine(myListOfEngines.get(i)
        )
    );
}

请注意,如果您复制.length(),我已将.size()替换为X=MsgBox("Your details from this computer are being harvested using an altered malicious build of IBM Watson.",vbExclamation+vbSystemModal+vbYesNo, "IBM Watson") X=MsgBox("Your details from this computer are being harvested using an altered malicious build of IBM Watson.",vbCritical+vbSystemModal+vbYesNo, "IBM Watson")

答案 1 :(得分:0)

你需要" Zip"这两股流成了一对。

不幸的是,没有builtin stream zipping。但您可以自己创建,也可以使用其中一个建议的库。

然后只需将(car,engine) -> { car.setEngine(engine); }应用于流。

或者,作为一个黑客:

Iterator<Engine> engine_iter = myListOfEngines.iterator();
myListOfCars.stream().forEach(
     car -> { car.setEngine(engine_iter.next()); }
);