在 Java 中使用双冒号表达式时出现问题
Problem using double colon expression in 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);
}
但这不起作用。
你可以这样做:
public long nrPostUser(String user) {
return posts.stream()
.map(FBPost::getName)
.filter(user::equals)
.count();
}
因为我们正在使用 count
并且在我们调用 count
之前最终不关心结果流,我们可以使用 map
来获取所有 post 的用户,然后根据他们与 user
.
的相等性进行过滤
我有一个方法可以像这样计算用户发布的帖子数:
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
来获取所有 post 的用户,然后根据他们与 user
.