是否存在类似于java.util.stream.Stream
的Scala类型(可能是trait) ?
(我使用的是支持更好的Java 7,所以Java 8的Stream
对我来说是不可用的。)
具体来说,它必须是泛型的,在某种程度上是可迭代的,并且是可闭包的。
try {
stream.foreach(println)
}
} finally {
stream.close()
}
最好使用标准库中的解决方案,但也可以使用其他库中的解决方案。
对于集合,Scala中的所有集合都可以像流一样使用。在Scala中,Iterable
/Iterator
的运算符是惰性应用的,例如,你也有视图和流(Stream
是一个惰性评估的List
,并对遍历的值进行记忆,所以如果你想要记忆,你可以使用流,但由于内存要求,这对于无限流的工作来说很棘手-仍然很酷)。
我不知道有什么直接的等价,但是我必须提到我不喜欢Java的流,因为Java的流是用来处理可迭代序列的,这意味着它们目前的设计是基于拉的。这在将来可能会改变,但是当处理流,特别是涉及I/O的流时,最好采用非阻塞和异步的方式,因此我更喜欢基于推送的方法,如Iteratees或响应式扩展(Reactive Extensions, Rx)模式。
Scala/Java生态系统在这方面做了很多工作。有RxJava,它是一个Rx。网络端口。还有Akka Streams,它是响应式流的一部分,旨在为背压指定一个可互操作的协议——在实验/alpha阶段。
还有一个无耻的推广——我正在开发Monifu,一个Scala的Rx实现,它可以做反向压力,也将与"响应式流"协议集成。而且我还认为它已经比RxJava的RxScala适配器有了更好的形状和更习惯的用法,但由于我是作者,所以对此持保留态度:-)