我应该使用Stream API进行简单的迭代吗?

Vie*_*orm 5 java-8 java-stream

使用新的Stream API进行简单迭代有什么好处吗?

没有Stream API:

 for (Map.Entry<String, String> entry : map.entrySet()) {
        doSomething(entry);
    }
Run Code Online (Sandbox Code Playgroud)

使用Stream API:

map.entrySet().stream().forEach((entry) -> {
        doSomething(entry);
    });
Run Code Online (Sandbox Code Playgroud)

代码的长度和可读性大致相同.是否有任何重要差异(例如性能)?

Shi*_*z.M 5

Streams API使并行性更容易实现(尽管您只能看到大型集合的好处).如果你必须在你的第一个例子上实现并行性,那么代码量会有相当大的差异(而不是将.parallelStream()添加到第二个例子)

根据Java Trail on parallelism:

在使用集合的应用程序中实现并行性的一个难点是集合不是线程安全的,这意味着多个线程无法在不引入线程干扰或内存一致性错误的情况下操作集合.Collections Framework提供了同步包装器,它将自动同步添加到任意集合,使其成为线程安全的.但是,同步会引入线程争用.您希望避免线程争用,因为它会阻止线程并行运行.通过聚合操作和并行流,您可以实现与非线程安全集合的并行性,前提是在操作集合时不要修改集合.请注意,并行性不会比串行执行操作更快,尽管可能有足够的数据和处理器内核.虽然聚合操作使您能够更轻松地实现并行性,但您仍有责任确定您的应用程序是否适合并行性.