假设我有一个 C 类的对象 c(来自一个库,所以我不能修改类定义)它扩展了 Iterable。
在我的函数中,我想为用户提供一种处理类型 R 对象流的方法,其中类型 R 的对象是通过对类型 T 的对象进行转换获得的。
目前我执行以下操作:
Stream<R> f(...) {
C c = ...;
return StreamSupport.stream(c.spliterator(), false)
.map(...);
}
Run Code Online (Sandbox Code Playgroud)
它之所以有效是因为 spliterator 在类 Iterable 中默认实现,但 javadoc 说出于性能原因不建议使用默认实现。
如果用户只想处理或应用流操作,我想返回一个流而不创建列表。我对流的并行化属性不感兴趣,因为 c 中的对象只能以顺序方式读取。
所以我想知道,如果有的话,做这种事情的推荐方式是什么。简单地返回一个 List 还是传递一个消费者函数作为参数更好?我有点担心建议不要使用默认拆分器实现的 javadoc。使用上述方法,我可以确保保留底层 Stream 中元素出现的顺序吗?