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

She*_*ari 13 java lambda java-8

我有一个Set<String> usernamesList<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);
} 
Run Code Online (Sandbox Code Playgroud)

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

players.stream().filter(!usernames.contains(p -> p.getUsername()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

这不编译."无法恢复方法getUsername()"

Jon*_*eet 28

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

players.stream().filter(p -> !usernames.contains(p.getUsername()))
Run Code Online (Sandbox Code Playgroud)

  • 公牛!我知道我错过了一些简单的事情.谢谢!#feelsAshamed (3认同)