提问者:小点点

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


我有一个计算用户发帖数量的方法是这样的:

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);
    }

但那不管用。


共1个答案

匿名用户

您可以这样做:

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

因为我们使用的是count,并且在调用count之前,最终并不关心结果流,所以我们可以使用map获取POST的所有用户,然后再过滤它们与user的相等性。