【问题标题】:Java 8 Lambda - Filter collection by another collectionJava 8 Lambda - 按另一个集合过滤集合
【发布时间】:2014-11-27 23:59:14
【问题描述】:

我有一个Set<String> usernamesList<Player> players

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

我知道如何在 Java 8 之前的 Vanilla 中做到这一点

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()”

【问题讨论】:

    标签: java lambda java-8


    【解决方案1】:

    您将 lambda 表达式放在错误的位置 - filter 的整个参数应该是 lambda 表达式。换句话说,“给定一个玩家p,我应该过滤还是不过滤?”

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

    【讨论】:

    • 公牛!我知道我错过了一些简单的事情。谢谢! #feelsAshamed
    • 嗨,我正在使用精确的场景,但是它显示编译错误“在封闭范围中定义的局部变量“用户名”必须是最终的或有效的最终的”
    • @vijayakumar:嗯,大概你在方法的某个地方修改了usernames......如果没有看到你的代码,很难说更多。也许您应该问一个新问题(在研究了该错误消息之后)。
    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 2020-11-05
    • 1970-01-01
    • 2015-10-20
    • 2018-12-11
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多