Java 8和11之间的流差



考虑此代码:

public static void main(String[] args) {
    Stream.iterate(1, i -> i + 1)
            .flatMap(i -> Stream.of(i, i, i))
            .peek(System.out::println)
            .limit(4)
            .forEach(i -> {});
}

Java 8:

中的输出
1
1
1
2
2
2

和Java 11:

1
1
1
2

这是在11?

中更改的Java 8中的错误或预期行为

上面的代码只是证明不同行为的一个示例,但差异的更严重的含义是,以下代码在Java 11中打印1,2,3,但在Java 8中进入无限循环:

    Stream.iterate(0, i -> i + 10)
            .flatMap(i -> Stream.iterate(i + 1, j -> j + 1))
            .limit(3)
            .forEach(System.out::println);

Stream.flatMap( )导致终端操作的短路破裂 -

这是一个从 Java 10 的错误修复的错误。

flatMap的情况下,懒惰发生了变化,直到Java-10,flatMap从来都不是懒惰。参见JDK-8075939

它不是错误,而是使flatMap在懒惰模式下工作的优化。

我可以看到的美丽功能改进之一,因为现在我可以用懒惰的方式使用flatMap几乎完全支持功能构图 而不是只是一个函数链执行链(如果不是懒惰)。

当我开始写作 new java代码时,功能组成确实使我真正兴奋我。

也许我参加聚会迟到了.. !!:p

相关内容

  • 没有找到相关文章

最新更新