Java 8 Lambda – 由另一个集合过滤集合
我有一个Set usernames
和List 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()))