【发布时间】:2020-06-27 10:45:24
【问题描述】:
流而不是嵌套的 forEach 循环
我想使用流而不是嵌套的 forEach 循环。我尝试创建如下所示的流,但它不起作用。 ForEach 循环工作正常。 CarWrapper 对象列表应包含与每个 Car 对象在其字符串列表中的字符串一样多的对象。你能帮忙吗?
'''
class Main {
public static void main(String[] args) {
new doit();
}
}
class doit{
public doit(){
List<CarWrapper> wrappers;
List<Car> cars = new ArrayList<>();
cars.add(new Car());
cars.add(new Car());
// cars.forEach(car -> {
// car.getDriver().getStrings().forEach(string -> {
// wrappers.add(wrapper(car, string));
// });
// });
wrappers = cars.stream()
.map(car->{
car.getDriver().getStrings().forEach(string->{
wrapper(car, string);
});
})
.collect(Collectors.toList());
}
public CarWrapper wrapper(Car car, String s){
return new CarWrapper.Builder().setBrand(car.getBrand()).setString(s).build();
}
}
class Car{
private Driver driver;
private String brand;
public Car(){
this.brand="bmw";
this.driver = new Driver();
}
public Driver getDriver(){
return driver;
}
public String getBrand(){
return brand;
}
}
class Driver{
private List<String> strings;
public Driver(){
this.strings = Arrays.asList("qwe","zxc");
}
public List<String> getStrings(){
return strings;
}
}
class CarWrapper{
private String brand;
private String string;
private CarWrapper(){
}
public static class Builder{
private String brand;
private String string;
public Builder setBrand(String brand){
this.brand=brand;
return this;
}
public Builder setString(String string){
this.string=string;
return this;
}
public CarWrapper build(){
CarWrapper carWrapper = new CarWrapper();
carWrapper.brand = this.brand;
carWrapper.string = this.string;
return carWrapper;
}
}
}
'''
【问题讨论】:
-
非流版本是什么样的?
-
@Andreas 我相信这是代码中被注释掉的部分。
-
@Sweeper 哦,我一直在寻找老式的 for-each 循环,例如
for (car : cars)
标签: java foreach java-stream