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

时间:2014-10-02 21:55:22

标签: 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);
} 

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

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

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

1 个答案:

答案 0 :(得分:27)

你在错误的地方得到了lambda表达式 - filter的整个参数应该是lambda表达式。换句话说,&#34;鉴于玩家p,我应该过滤它吗?&#34;

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