Return Java 中作为 lambda 的谓词
Return a predicate as a lambda in Java
在 this 在线教程中,他们使用 lambda 来过滤用户列表:
List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
现在我想创建一个接受 lambda 的函数(u -> u.age > 30
部分),这样我就可以将我想要的任何条件放入此 lambda 中。但是我对如何实现这个有点困惑。我制作了一个空接口 Filter
并制作了以下方法:
public List<User> filterUsers(Filter f, List<User users>){
return users.stream().filter(f).collect(Collectors.toList());
}
public Filter olderThan(int age) {
return u -> u.getAge() > age;
}
但这给出了一些错误。
(我在 user
中的 age
字段做了一个 getter。
有没有办法调整界面 Filter
或其他方法来实现此功能?
您应该简单地使用 Predicate
而不是 Filter
。
您不需要 Filter
类型。只需让 filterUsers
方法接受一个 Predicate<User>
并将其传入:
public List<User> filterUsers(Predicate<User> p, List<User> users) {
return users.stream().filter(p).collect(Collectors.toList());
}
这将允许您编写如下内容:
List<User> filtered = filterUsers(u -> u.age > 10, users);
如果您想为了方便而制作 "olderThan" 东西,您可以这样写:
public Predicate<User> olderThan(int age) {
return u -> u.getAge() > age;
}
然后你可以写:
List<User> filtered = filterUser(olderThan(15), users);
在 this 在线教程中,他们使用 lambda 来过滤用户列表:
List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
现在我想创建一个接受 lambda 的函数(u -> u.age > 30
部分),这样我就可以将我想要的任何条件放入此 lambda 中。但是我对如何实现这个有点困惑。我制作了一个空接口 Filter
并制作了以下方法:
public List<User> filterUsers(Filter f, List<User users>){
return users.stream().filter(f).collect(Collectors.toList());
}
public Filter olderThan(int age) {
return u -> u.getAge() > age;
}
但这给出了一些错误。
(我在 user
中的 age
字段做了一个 getter。
有没有办法调整界面 Filter
或其他方法来实现此功能?
您应该简单地使用 Predicate
而不是 Filter
。
您不需要 Filter
类型。只需让 filterUsers
方法接受一个 Predicate<User>
并将其传入:
public List<User> filterUsers(Predicate<User> p, List<User> users) {
return users.stream().filter(p).collect(Collectors.toList());
}
这将允许您编写如下内容:
List<User> filtered = filterUsers(u -> u.age > 10, users);
如果您想为了方便而制作 "olderThan" 东西,您可以这样写:
public Predicate<User> olderThan(int age) {
return u -> u.getAge() > age;
}
然后你可以写:
List<User> filtered = filterUser(olderThan(15), users);