【发布时间】:2019-06-11 19:23:43
【问题描述】:
在阅读有关顺序流的文章时,我想到了一个问题,即使用顺序流与传统的 for 循环相比有什么性能优势,或者流只是顺序语法糖,会带来额外的性能开销?
考虑下面的示例,我看不到使用顺序流的任何性能优势:
Stream.of("d2", "a2", "b1", "b3", "c")
.filter(s -> {
System.out.println("filter: " + s);
return s.startsWith("a");
})
.forEach(s -> System.out.println("forEach: " + s));
使用经典的java:
String[] strings = {"d2", "a2", "b1", "b3", "c"};
for (String s : strings)
{
System.out.println("Before filtering: " + s);
if (s.startsWith("a"))
{
System.out.println("After Filtering: " + s);
}
}
点这里是 a2 的流处理仅在 d2 上的所有操作完成后才开始(之前我认为当 d2 由 foreach 处理时,过滤器会在 a2 上进行分层操作,但根据本文并非如此:https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/),经典 java 也是如此,那么除了“富有表现力”和“优雅”编码风格之外,使用流的动机应该是什么?我知道在处理流时编译器会产生性能开销,有人知道吗/在使用顺序流时体验过任何性能优势吗?
【问题讨论】: