Как фильтровать отфильтрованный поток

#java #jpa #filter #stream

#java — язык #jpa #Фильтр #поток #java

Вопрос:

Сейчас я изучаю Java8 с помощью stream.

Я получил список CustomDto. В CustomDto есть список CustomDto1. У CustomDto1 есть список CustomDto2.

Мне нужен такой результат.

 List<CustomDto> response = data from read;
response.stream()
.filter(x-> x.getCustomDto1List.stream()
    .filter(y-> y.getCustomDto2List.stream()
       .filter(z-> z.getCustomDto2.getSomeColumn.equals("XXX"))
     )
)
  

Возможно ли это? и если это так, то как я могу получить этот результат?

Ответ №1:

Да, вы можете, но вы должны использовать метод с именем anyMatch();

 .filter(x-> x.getCustomDto1List.stream()
                    .anyMatch(y-> y.getCustomDto2List.stream()
                            .anyMatch(z-> z.getCustomDto2.getSomeColumn.equals("XXX"))
                    )
            )
  

Комментарии:

1. Спасибо за ваш совет. Но я хочу, чтобы все перечисляли списки customDto.

2. Тогда просто используйте .map() вместо .filter().

Ответ №2:

Похоже, вы пытаетесь найти все объекты, которые имеют определенное значение во вложенном списке. Что-то вроде этого?

 response.stream().filter(x -> x.getCustomDto1List.stream()
        .flatMap(y-> y.getCustomDto2List.stream())
        .anyMatch(z-> z.getSomeColumn.equals("XXX")))
    .collect(toList());