繁体   English   中英

在Java中将谓词作为lambda返回

[英]Return a predicate as a lambda in Java

这个在线教程中,他们使用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段的吸气剂)。 有没有办法调整界面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);

如果你想为了方便而制作“oldThan”的东西,你可以写:

public Predicate<User> olderThan(int age) {
    return u -> u.getAge() > age;
}

然后你可以写:

List<User> filtered = filterUser(olderThan(15), users);

您应该只使用Predicate而不是Filter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM