【问题标题】:Java forEach nested loop as streamJava forEach 嵌套循环作为流
【发布时间】: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


【解决方案1】:

试试这个

wrappers = cars.stream()
              .flatMap(car -> car.getDriver().getStrings().stream()
                      .map(string -> wrapper(car, string)))
              .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多