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