Java 8流过滤器惰性评估的意图

Java 8流过滤器惰性评估的意图,java,java-8,java-stream,Java,Java 8,Java Stream,下面的选项1或选项2是否正确(例如,一个选项优于另一个选项),或者它们是否等效 选项1 collectionOfThings. stream(). filter(thing -> thing.condition1() && thing.condition2()) 或 选项2 collectionOfThings .stream() .filter(thing -> thing.condition1()) .filter(thi

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

选项1

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

选项2

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

要编译,第二个应该是

collectionOfThings.
    stream().
    filter(thing -> thing.condition1()).
    filter(thing -> thing.condition2())
它们都是等价的。有时一个比另一个更易读

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

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

还要注意的是,传统做法是将点放在行首而不是行尾,因为您可以编写项目符号列表。

谢谢!我调整了示例以修复错误。上一个问题的答案不正确。我不是基准测试专家,但我自己的测试表明,Option1可以表现得更好。我会把我的测试代码贴到另一个问题上,如果有人对我的发现进行评论,我将不胜感激。