java - Scala 相当于 java.util.stream

标签 java scala stream

是否有类似于 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/

相关文章:

java - Android操作栏自定义颜色样式

java - 如何在spring中附加从前端检索的请求参数?

java - 为什么 @RequestMapping 注解在 java 中接受 String 参数而在 scala 中不接受?

c - 流上有哪些可能的错误条件会导致ferror()被设置?

java - 永久代总是在 HotSpot VM 上连续收集吗?

java - 用户 'root' 的访问被拒绝 @'localhost' - 无法使用 java 应用程序连接到数据库

scala - 弱引用相等

c++ - 如何像标准 C++ 流一样使用我的日志记录类?

php - 在PHP中使用fsockopen与gmail imap服务器通信时出现问题