我有一个方法,例如:
private List<Person> findFilteredPersons(List<Person> persons,
Predicate<Person> filter) {
return persons
.stream()
.filter(filter)
.sorted(BY_NAME.thenComparing(BY_AGE))
.collect(Collectors.toList());
}
现在我想在多个地方使用此方法,但在一个地方我不需要过滤列表,我只想对其进行排序。实现这一目标的最佳方法是什么?
最佳答案
当简单地使用 x -> true
谓词来指示“无过滤”时,您不太可能遇到性能问题,但是,如果您想为了清楚起见而表达未过滤的操作,解决方案很简单:与往常一样,对于此类代码组织,将操作分为不同的部分和公共(public)部分:
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());
}
关于Java 8 Stream API如何重用自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39270206/