Фильтровать внутренний список объектов в потоке List - PullRequest
0 голосов
/ 03 мая 2020

У меня есть объекты List of Person

public class Person {
    private String name;
    private List<Animal> animals;
}

У которых есть список объектов животных:

public class Animal {
    private String name;
}

Я пытаюсь создать из него новый список, и я пытаюсь извлекать только тех лиц, которые имеют указанное c имя

List<Person> filteredPeople = people.stream()
                .filter(e -> e.getName().equals("John")).collect(Collectors.toList());

Можно ли добавить еще один фильтр и как я могу получить доступ к списку животных внутри человека, чтобы я мог фильтровать по имени животного - для Например, если какое-либо имя Animals (внутри персонажа) называется "Lucky", чтобы также поместить этот объект Person в новый список?

Похоже, это неверная идея:

.filter(e -> e.getAnimals().stream().filter(f -> f.getName().equals("lucky")))

1 Ответ

1 голос
/ 03 мая 2020

Вы можете достичь этого с помощью

persons.stream()
    .filter(p -> p.getName.equals("John") || p.getAnimals().stream().anyMatch(a -> a.getName.equals("lucky")))
    .collect(Collectors.toList())
...