Многоуровневая фильтрация списка Java 8 - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю с классами с многоуровневой глубиной.Я пытаюсь отфильтровать по внутренней глубине, но получаю сообщение об ошибке

Bad return type in lambda expression: Stream<InnerClassName> cannot be converted to boolean 

Структура моих классов:

class A {
    List<B> B;
    Integer Id;
}

class B {
        List<C> C;
        Integer Id;
    }


class C {                    
         Integer Id;
        }

Если у меня есть список с именем AList, я попыталсяделает

AList.getBlist().stream().filter(bList -> bList.getId.equals(5));

, который отлично работает.То, что я пытаюсь сделать, это фильтр со значениями внутри Class C, которые могут быть получены с помощью Blist.getClist

1 Ответ

0 голосов
/ 19 февраля 2019

Если вы пытаетесь отфильтровать содержимое List<A> и получить тот же формат, что и для вывода, вы можете выполнить его следующим образом:

List<A> output = aList.stream()
        .filter(a -> a.getBList().stream() // bList from a
                .flatMap(b -> b.getCList().stream()) // cList from each b
                .anyMatch(c -> c.getId() == 5)) // equals(5)
        .collect(Collectors.toList());

Приведенный выше код фильтрует все эти «A» изList<A> такой, что любая часть 'C' List<C> в любой части 'B' List<B> в пределах A соответствует данному условию.

...