Использование плоской карты со списком списка - PullRequest
0 голосов
/ 09 октября 2018

Если у меня есть List<List<Foo>>, я могу использовать плоскую карту, чтобы сгладить список.Но у меня есть MyClass, который имеет List<Foo>, а класс Foo имеет список баров List<Bar>, тогда я должен сделать что-то вроде этого:

myClass.getFoos().stream().map(Foo::getBars).forEach({
    bar -> // some code
});

Возможно ли использовать плоскуюкарта в этом сценарии, так что я могу получить список баров от MyClass в один выстрел.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Попробуйте это:

myClass.getFoos().stream()
    .map(Foo::getBars)
    .flatMap(List::stream) // flatten the lists
    .forEach(...);

Обратите внимание на исключительное использование ссылок на методы, которые я нахожу аккуратнее и проще для чтения, чем лямбды.

0 голосов
/ 09 октября 2018
myClass.getFoos()
        .stream() 
        .flatMap(x -> x.getBars().stream())
        .forEach(...)
...