Итерация по списку объектов внутри другого объекта, который у меня есть в списке - PullRequest
3 голосов
/ 28 октября 2019

Итак, у меня есть такая структура

List<Object1> list1

class Object1{
   private List<Object2> list2
}
class Object2{
   private List<Object3> list3
} 

И мне нужно получить количество всех экземпляров Objects3. Я новичок в java-8 и потоках, так что это довольно запутанно для меня, но я пытался сделать что-то вроде этого.

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Я не виню вас, учитывая, что вы новичок в потоковом API, но ваш подход слишком сложен.

Я бы лично использовал этот подход для простоты и удобочитаемости.

list1.stream() // Stream<Object1>
     .flatMap(s -> s.getList2().stream()) // Stream<Object2>
     .flatMap(s -> s.getList3().stream()) // Stream<Object3>
     .count(); // return the count of all Object3 instances
0 голосов
/ 28 октября 2019

Поскольку вам нужна сумма размера list3 в каждом Object2 экземпляре, вы можете использовать flatMapToInt с вложенным mapToInt для вычисления sum как:

int count = list1
        .stream()
        .flatMapToInt(obj1 -> obj1.getList2()
                .stream()
                .mapToInt(obj2 -> obj2.getList3().size()))
        .sum();
...