#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());