Java 8 Streams过滤器延迟评估的意图[重复]

Posted

技术标签:

【中文标题】Java 8 Streams过滤器延迟评估的意图[重复]【英文标题】:Java 8 Streams Filter Intention of Lazy Evaluation [duplicate] 【发布时间】:2016-07-30 21:52:21 【问题描述】:

下面的选项 1 或选项 2 是否正确(例如,一个优先于另一个)或它们是否等效?

选项 1

collectionOfThings.
    stream().
    filter(thing -> thing.condition1() && thing.condition2())

选项 2

collectionOfThings
    .stream()
    .filter(thing -> thing.condition1())
    .filter(thing -> thing.condition2())

【问题讨论】:

上一个问题的答案是错误的。我不是基准测试专家,但我自己的测试表明 Option1 的性能要好得多。我会将我的测试代码发布到另一个问题,如果有人对我的发现进行审查,我将不胜感激。 【参考方案1】:

要编译,第二个应该是

collectionOfThings.
    stream().
    filter(thing -> thing.condition1()).
    filter(thing -> thing.condition2())

它们都是等价的。有时一个比另一个更具可读性。

另一种编写第二种方法是使用方法引用:

collectionOfThings
    .stream()
    .filter(Thing::condition1)
    .filter(Thing::condition2)

另请注意,惯例是将点放在行首而不是行尾,就像您编写项目符号列表一样。

【讨论】:

谢谢!我调整了示例以修复错误。

以上是关于Java 8 Streams过滤器延迟评估的意图[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 Streams API 详解

java 8流多个过滤器

如何使用Java Streams API正确过滤开始日期和结束日期之间的日期?

Java 8 Streams - 分组为单个值[重复]

Java 8 中的 Streams API 详解

Java 8 中的 Streams API 详解