Группировка Java по значению внутреннего списка - PullRequest
0 голосов
/ 09 июня 2018
class A {    
    private Collection<B> b;    
}

class B {
    String field;
    private Collection<C> c;
}

class C {
    String Name;
}

Теперь я хочу проверить, есть ли значение в классе C (Имя), равно или нет, зацикливая коллекцию B и передавая name в качестве аргумента.Как нам этого добиться, используя потоки в Java?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Вы можете получить результат следующим образом:

List<C> result = myList.stream()
            .flatMap(a -> a.getB().stream())
            .flatMap(b -> b.getC().stream())
            .filter(c -> Objects.equals(c.getName(), searchName))
            .collect(Collectors.toList());

Это создает поток из myList (List<A>), а затем последовательно выравнивает вложенные коллекции, чтобы получить Stream<C>, а затем возвращает * 1006.* объекты, которые имеют searchName и затем, наконец, собирают его в экземпляр списка.

0 голосов
/ 09 июня 2018

Это создаст список C путем фильтрации списка A, имя которого равно yourName

List<A> listA = ...

List<C> filteredA = listA.stream()
     .map(A::getB)
     .flatMap(Collection::stream)
     .map(B::getC)
     .flatMap(Collection::stream)
     .filter(c -> yourName.equals(c.getName()))
     .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...