【问题标题】:Java 8 lambdas multiple filter callsJava 8 lambdas 多个过滤器调用
【发布时间】:2015-07-29 20:38:53
【问题描述】:

在 Java 8 lambda 表达式中使用 filter(Predicate<? super T> predicate) 调用时,我有两种想法:是将所有 Predicate 逻辑放在一个调用中,还是在适当的情况下链接 filter(Predicate<? super T> predicate) 调用以提高可读性。

我认为链接filter(Predicate<? super T> predicate) 调用会很便宜,因为它们还没有遇到终止符,所以在可读性方面会犯错误,但我对我对Streams API 的了解不够自信,无法完全理解权衡是什么。

借助以下示例(考虑过于复杂的谓词),哪个实现更好:List<Person> usingOneFilterList<Person> usingTwoFilters

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class SEExample {

    private static class Person {
        private final int age;
        private final int heightInCm;

        public Person(int age, int heightInCm) {
            this.age = age;
            this.heightInCm = heightInCm;
        }

        public int getAge() {
            return age;
        }

        public int getHeight() {
            return heightInCm;
        }
    }

    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
                new Person(14, 140), 
                new Person(15, 140), 
                new Person(16, 150), 
                new Person(17, 120));
        List<Person> usingOneFilter = people
                .stream()
                .filter(p -> p.getAge() >= 16 && p.getHeight() >= 130)
                .collect(Collectors.toList());
        List<Person> usingTwoFilters = people
                .stream()
                .filter(p -> p.getAge() >= 16)
                .filter(p -> p.getHeight() >= 130)
                .collect(Collectors.toList());
    }

}

【问题讨论】:

  • 一个六个,另一个六个。没有真正的区别;没关系。
  • 嗨,路易斯,感谢您的意见。根据您的评论,我假设从性能的角度来看它几乎相同。在这种情况下,您是否同意多个过滤器调用可以提高可读性,特别是如果其中有很多布尔逻辑?
  • 可能吗?具体情况我得看,肯定是不同的开发者会有不同的看法。

标签: java lambda java-8 java-stream


【解决方案1】:

在这样一个小例子中,我认为可读性并没有真正受到影响,但我仍然更喜欢使用单独的过滤器方法。当然,如果它更复杂的话。

这确实不是很贵。除非您遇到性能问题并且分析表明这是瓶颈,否则没有理由“优化”它。但这极不可能。

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多