生成代码流

时间:2011-03-19 15:15:59

标签: scala

人们真的在生产代码中使用Scala的Stream类,还是主要是学术兴趣?

5 个答案:

答案 0 :(得分:4)

Stream没有问题,除非人们使用它来替换{​​{1}} - 而不是替换Iterator,这是与它最相似的集合。在这种特殊情况下,人们必须小心使用它。另一方面,也必须小心使用List,因为每个元素只能迭代一次。

所以,既然两者都有自己的问题,为什么单挑Iterator?我敢说,人们习惯于从Stream使用Java,而Iterator则是功能性的。

答案 1 :(得分:3)

即使我写了 Iterator is what I want to use nearly all the time ,我也会在生产代码中使用Stream。我只是不自动假设细胞是垃圾收集。

有时Stream完全符合问题。我认为api给出some good examples涉及递归的地方......

答案 2 :(得分:3)

here。这篇博客文章描述了如何使用Scala Streams(以及内存映射文件)有效地读取大文件(1-2G)。

我还没试过,但解决方案看起来很合理。 Stream在低级ByteBuffer Java API之上提供了一个很好的抽象,可以将内存映射文件作为一系列记录来处理。

答案 3 :(得分:2)

是的,我使用它,虽然它往往是这样的:

(as.toStream collect expensiveConversionToB) match {
  case b #:: _ => //found my expensive b
  case _       =>
}

当然,我可能会使用非严格视图和find这个例子

答案 4 :(得分:1)

由于不使用Stream的唯一原因是确保JVM没有保留对早期conses的引用可能很棘手,我使用的一种方法相当不错就是建立一个Stream并立即将其转换为Iterator以供实际使用。它在使用方面失去了一些Stream的优良属性,特别是在回溯方面,但是如果你只想对结果进行一次传递,那么通过这种方式构建结构通常比扭曲更容易直接进入hasNext的{​​{1}} / next()模型。