Rie*_*ien 4 java lambda predicate filter java-8
在这个在线教程中,他们使用lambda来过滤用户列表:
List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个接受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;
}
Run Code Online (Sandbox Code Playgroud)
但这会产生许多错误.
(我做了一个age领域的吸气剂user).有没有办法调整界面Filter或其他方法使其工作?
Mat*_*nam 12
你不需要你的Filter类型.只需使该filterUsers方法获取Predicate<User>并传递它:
public List<User> filterUsers(Predicate<User> p, List<User> users) {
return users.stream().filter(p).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
这可以让你写下这样的东西:
List<User> filtered = filterUsers(u -> u.age > 10, users);
Run Code Online (Sandbox Code Playgroud)
如果你想为了方便而制作"oldThan"的东西,你可以写:
public Predicate<User> olderThan(int age) {
return u -> u.getAge() > age;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
List<User> filtered = filterUser(olderThan(15), users);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |