gpt4 book ai didi

java - Scala 相当于 java.util.stream

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:12 25 4
gpt4 key购买 nike

是否有类似于 java.util.stream.Stream 的 Scala 类型(可能是特征) ?

(我使用的是支持更好的 Java 7,所以我无法使用 Java 8 的 Stream。)

具体来说,它必须是通用类型的、以某种方式可迭代且可关闭。

try {
stream.foreach(println)
}
} finally {
stream.close()
}

标准库中的解决方案是首选,但其他库中的解决方案也是可以接受的。

最佳答案

对于集合,Scala 中的所有集合都可以像流一样使用。在 Scala 中,Iterable/Iterator 上的运算符被延迟应用,例如,您还有 ViewsStream (Stream 是一个惰性评估的 List 并且会内存遍历的值,所以如果你想要内存你可以使用流,但由于内存需求,这很棘手使用无限流 - 仍然很酷)。

但是您可能已经注意到,这并不能解决所有情况,因为流可能是来自网络套接字、文件句柄等的数据流。因此需要处理所使用的底层资源。

我不知道有直接的等价物,但我还必须提到我不喜欢 Java 的流,因为 Java 的流用于处理可迭代序列,这意味着它们当前的设计是基于拉取的。这在未来可能会改变,但是在处理流时,尤其是涉及 I/O 的流时,最好是非阻塞和异步的,因此我更喜欢基于推送的方法,比如 Iteratees ,或响应式扩展 (Rx) 模式。

在这方面,Scala/Java 生态系统正在发生很多事情。有 RxJava ,这是一个 Rx.NET 端口。还有 Akka Streams , 的一部分 Reactive Streams努力为背压指定可互操作的协议(protocol) - 在实验/alpha 阶段。

还有一次无耻的晋升——我正在研究 Monifu ,一个 Scala 的 Rx 实现,它做背压并且也将与“Reactive Streams”协议(protocol)集成。而且我还认为它已经比 RxJava 的 RxScala 适配器更好,也更惯用,但由于我是作者,所以对它持保留态度 :-)

关于java - Scala 相当于 java.util.stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443565/

25 4 0