Java 8 Stream API如何重用自定义方法

标签 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());
}

现在我想在多个地方使用此方法,但在一个地方我不需要过滤列表,我只想对其进行排序。实现这一目标的最佳方法是什么?

最佳答案

当简单地使用 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/

相关文章:

java - 更新一个 jfreechart

java - 通过java中的内联创建对象访问私有(private)元素

collections - Java8 - 按索引获取,但类似于 Map 的 'getOrDefault'?

java - 将多个 map 聚合为一个 map 的优雅且高效的方式

java - 将 Java Stream 过滤为 1 个且仅 1 个元素

尝试连接到 gmail IMAP 服务器时出现 javax.mail.MessagingException

java - java中的绘图框架

java - Heroku - 我部署的 Spring MVC 项目不起作用

java - 将 List<List<Object>> 转换为 Map<String,String> Java 8

java - 1 个核心上的并行 Java 流