Java 8:从流中提取子流

Sne*_*eha 3 java java-8 java-stream

我有一个对象流,我需要从中提取一个只有一些对象属性的Stream.

例如,从a Stream<Car>,我需要提取一个Stream<CarDetails>.

Car {
   String name;
   String model;
   Engine e;
   CarType t;
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想提取一个Stream类型为的对象CarDetails:

CarDetails {
   String name;
   String model;
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 7

map假设您具有所需的CarDetails构造函数,则可以实现此目的:

Stream<Car> cars = ...
Stream<CarDetails> details = cars.map(c -> new CarDetails(c.getName(),c.getModel()));
Run Code Online (Sandbox Code Playgroud)

  • 或者,使用CarDetailsFactory:`cars.map(CarDetailsFactory :: createCarDetails)`或`Car`提供的方法:`cars.map(Car :: createDetailsObject)` (4认同)
  • 只是要明确"细节"不是"子流".由于汽车已经运行,您不再可以使用汽车流.如果您需要来自汽车的另一个​​流,您需要创建一个新的汽车流. (3认同)
  • @Sneha在这种情况下你可以使用`flatMap` - `cars.flatMap(c-> c.getModels().stream().map(m-> new CarDetails(c.getName(),m)))`. (2认同)