2017-02-13 2 views
3

У меня есть поток объектов, из которого мне нужно извлечь поток, который имеет только некоторые атрибуты объекта.Java 8: извлечение субпотока из потока

Например, от Stream<Car>, мне нужно извлечь Stream<CarDetails>.

Car { 
    String name; 
    String model; 
    Engine e; 
    CarType t; 
    ... 
} 

Я хочу, чтобы извлечь Stream объектов, имеющих тип CarDetails:

CarDetails { 
    String name; 
    String model; 
} 

ответ

7

Вы можете добиться этого с map, если у вас есть необходимый CarDetails конструктор:

Stream<Car> cars = ... 
Stream<CarDetails> details = cars.map(c -> new CarDetails(c.getName(),c.getModel())); 
+4

Попеременно, используя a CarDetailsFactory: 'cars.map (CarDetailsFactory :: createCarDe хвосты) ' или метод, который' Car' предоставляет: 'cars.map (Car :: createDetailsObject)' –

+0

Спасибо .. просто чтобы расширить мой вопрос немного больше .. что, если 'Car.model' является 'Set ' и я все еще хочу 'stream ' с индивидуальной моделью и названием машины .. – Sneha

+2

@Sneha В этом случае вы можете использовать 'flatMap' -' cars.flatMap (c-> c.getModels(). Stream () .map (m-> new CarDetails (c.getName(), m))) '. – Eran

Смежные вопросы