Java 8 Lambda – Collection de filtres par une autre collection

J’ai un Set usernames et une List players

Je voudrais filtrer les joueurs qui ne sont pas dans l’ensemble.

Je sais comment faire cela dans Vanilla pre Java 8

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

J’essaye d’écrire ce code simple avec une expression Lambda, mais j’ai du mal à obtenir usernames.contains() pour travailler dans un filtre

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

Cela ne comstack pas. “Ne peut pas resove la méthode getUsername ()”

Vous avez l’expression lambda au mauvais endroit – l’ensemble de l’argument à filter doit être l’expression lambda. En d’autres termes, “Étant donné un joueur p , dois-je le filtrer ou pas?”

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