tar*_*aki 2 java java-8 java-stream
我有一个方法,如:
private List<Person> findFilteredPersons(List<Person> persons,
Predicate<Person> filter) {
return persons
.stream()
.filter(filter)
.sorted(BY_NAME.thenComparing(BY_AGE))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
现在我想在几个地方使用这个方法,但在一个地方我不需要过滤列表,我只想对它进行排序.实现这一目标的最佳方法是什么?
要获取所有项目(几乎忽略过滤器),传递一个占用所有人的谓词:
p -> true
Run Code Online (Sandbox Code Playgroud)
您可以创建另一种方法:
private List<Person> findPeople(List<Person> persons) {
return findFilteredPersons(persons, p -> true);
}
Run Code Online (Sandbox Code Playgroud)
简单地使用x -> true谓词来表示"无过滤" 时,你不太可能遇到性能问题,但是,如果你想明确表达未经过滤的操作,那么解决方案是直截了当的:对于这种类型的代码一如既往组织,将操作分为不同的部分和共同的部分:
private List<Person> findFilteredPersons(List<Person> persons, Predicate<Person> filter) {
return collectSortedPersons(persons.stream().filter(filter));
}
private List<Person> findPersons(List<Person> persons) {
return collectSortedPersons(persons.stream());
}
private List<Person> collectSortedPersons(Stream<Person> persons) {
return persons
.sorted(BY_NAME.thenComparing(BY_AGE))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |