【发布时间】:2016-09-25 19:00:08
【问题描述】:
我很惊讶地看到BufferedReader lines() 方法创建了一个Stream<T> 的实例,它实现了Iterator<T> 接口,而不是Spliterator<T>。由于许多原因,使用Spliterator<T> 有几个优点,即使没有并行性。比如Brian Goetz states in its answer对问题Iterator versus Stream of Java 8:
Spliterator的每个元素访问成本从根本上低于Iterator,即使是按顺序访问也是如此。
那么,为什么BufferedReader::lines() 通过Iterator<T> 创建Stream<T> 而不是Spliterator<T>?
【问题讨论】:
-
人们使用熟悉的东西。 JRE 开发人员没有理由与众不同。
-
恕我直言,JRE 开发人员正在开发与新 JDK8 API 密切相关的新功能,特别是
Stream<T>应该意识到这一点。 -
这也是我的想法,尤其是当谈到如今的 Java 9 新方法时,
Spliterator的优势应该广为人知。不过,我尽量不要判断得太快。我们不知道特定开发人员在实施这种方法时必须处理的工作量……
标签: lambda io java-8 java-stream