在Java中以lambda形式返回谓词
在在线教程中,他们使用lambda筛选用户列表:在Java中以lambda形式返回谓词,java,filter,lambda,java-8,predicate,Java,Filter,Lambda,Java 8,Predicate,在在线教程中,他们使用lambda筛选用户列表: List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList()); 但这会带来一些错误 (我在user中获取了age字段)。 有没有办法调整界面过滤器或其他方法来实现此功能?您只需使用谓词而不是过滤器您不需要过滤器类型。只需让filterUsers方法接受一个谓词,并将其传入: public List&l
List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
但这会带来一些错误
(我在user
中获取了age
字段)。
有没有办法调整界面
过滤器
或其他方法来实现此功能?您只需使用谓词
而不是过滤器您不需要过滤器
类型。只需让filterUsers
方法接受一个谓词
,并将其传入:
public List<User> filterUsers(Predicate<User> p, List<User> users) {
return users.stream().filter(p).collect(Collectors.toList());
}
公共列表过滤器用户(谓词p,列表用户){
返回users.stream().filter(p.collect)(Collectors.toList());
}
这将允许您编写如下内容:
List<User> filtered = filterUsers(u -> u.age > 10, users);
List filtered=filterUsers(u->u.age>10,用户);
如果你想让你的“olderThan”产品更方便,你可以写:
public Predicate<User> olderThan(int age) {
return u -> u.getAge() > age;
}
公共谓词olderThan(int-age){
返回u->u.getAge()>age;
}
然后你可以写:
List<User> filtered = filterUser(olderThan(15), users);
List filtered=filterUser(olderThan(15),用户);
您可以使筛选方法更通用。类似于此:publicslist过滤器列表(PredicateGreat泛化!)!
List<User> filtered = filterUser(olderThan(15), users);