java - Java中使用双冒号表达式的问题

标签 java lambda method-reference

我有一个方法可以像这样计算用户发布的帖子数:

public long nrPostUser(String user)
    {
        return this.posts.stream().filter(a-> a.getName().equals(user) ).count();
    }

作为训练练习,我想做同样的事情,但使用双冒号运算符而不是 lambda 表达式,我设法通过硬编码 user 参数来做到这一点,如下所示:

public long nrPostUser2(String user)
    {
        return  this.posts.stream().filter(FBPost::isUser).count();
    }

public boolean isUser()
    {
        return this.name.equals("1");
    }

我的问题是,我似乎无法使用它的非硬编码版本,据我所知,它应该是这样的:

public long nrPostUser3(String user)
    {
        Function<String,Boolean> func = FBPost::isUser2;
        return (int) this.posts.stream().filter(FBPost::isUser).count();
    }

public boolean isUser2(String user)
    {
        return this.name.equals(user);
    }

但这不起作用。

最佳答案

你可以这样做:

public long nrPostUser(String user) {
    return posts.stream()
            .map(FBPost::getName)
            .filter(user::equals)
            .count();
}

因为我们正在使用 count 并且在我们调用 count 之前最终不关心结果流,所以我们可以使用 map 来在过滤他们与 user 是否相等之前获取所有帖子的用户。

关于java - Java中使用双冒号表达式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62717151/

相关文章:

c++ - 默认情况下 Constexpr lambda?

c# - Lambda 表达式参数

java - 当实现谓词而不是 boolean 值时

java - "an Arbitrary Object of a Particular Type"在 Java 8 中意味着什么?

Java,如何即时写入文件

java - HTTP 状态 405 - 请求方法 'POST' 不支持 Spring MVC

java - 当我移动 Web 服务时,所有硬编码 URI 会发生什么情况?

java - JSP用JSP打印数组

lambda - Prolog 中的 Binder

java - 在 Stream.map 中使用方法引用时,Eclipse 内容辅助不起作用