Java 8 Lambda – 由另一个集合过滤集合

我有一个Set usernamesList players

我想过滤掉那些不在Set中的玩家。

我知道如何在Vanilla pre Java 8中做到这一点

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

我试图用Lambda表达式编写这个简单的代码,但我很难让usernames.contains()在filter中工作

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

这不编译。 “无法恢复方法getUsername()”

你已经将lambda表达式放在了错误的位置 – filter的整个参数应该是lambda表达式。 换句话说,“鉴于玩家p ,我应该过滤它吗?”

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