Подтвердить что ты не робот

Java 8 Lambda - коллекция фильтров другой коллекцией

У меня есть Set<String> usernames и List<Player> players

Я хотел бы отфильтровать тех игроков, которые не находятся в Set.

Я знаю, как это сделать в Vanilla pre Java 8

List<Player> distinctPlayers = new ArrayList<Player>();

for(Player p : players) {
    if(!usernames.contains(p.getUsername()) distinctPlayers.add(p);
} 

Я пытаюсь написать этот простой код с помощью выражения Lambda, но я изо всех сил стараюсь, чтобы usernames.contains() работал в фильтре

players.stream().filter(!usernames.contains(p -> p.getUsername()))
.collect(Collectors.toList());

Это не компилируется. "Невозможно восстановить метод getUsername()"

4b9b3361

Ответ 1

У вас есть выражение лямбда в неправильном месте - весь аргумент filter должен быть выражением лямбда. Другими словами, "Учитывая игрока p, следует ли его фильтровать или нет?"

players.stream().filter(p -> !usernames.contains(p.getUsername()))