scala - 在 scala 2.7.5 中对迭代器进行分区

标签 scala iterator scala-2.8 lazy-evaluation

看起来好像在 scala 2.7.5 中的 Iterator 上没有 partition 方法(在 2.8 中有)。我希望有一个分区而不丢失 Iterator惰性,因此以下不是一个选项:

itr.toList.partition( someTest(_) )

任何人都可以推荐一种无需实现我自己的 partition 方法的方法吗?例如,是否有某种方法可以将 Iterator 转换为延迟计算的 Stream

最佳答案

您尝试过 Stream.fromIterator 吗?方法?它生成一个包含给定迭代器元素的流 :)。

一个例子是:

val iter = List(1,2,3,4).elements // just a simple iterator

val str = Stream.fromIterator(iter)

str.partition(_ >= 3)

希望对您有所帮助(这就是您的想法)。

编辑: 只是一个例子来表明这是惰性的(并且被内存 - 就像所有的 Stream 一样)。

scala> val iter = new Iterator[Int] {
     | var lst = List(1,2,3,4)
     | def hasNext() = !lst.isEmpty
     | def next() = { val x = lst.head; println(x); lst = lst.tail; x }
     | }

scala> val stream = Stream.fromIterator(iter)
1
stream: Stream[Int] = Stream(1, ?)

scala> stream.partition(_ >= 2)
2
3
4
res1: (Iterable[Int], Iterable[Int]) = (ArrayBuffer(2, 3, 4),ArrayBuffer(1))

scala> stream.partition(_ >= 3)
res2: (Iterable[Int], Iterable[Int]) = (ArrayBuffer(3, 4),ArrayBuffer(1, 2))

注意:省略了一些输出,因为它非常冗长。

-- 弗拉维乌西普西根

关于scala - 在 scala 2.7.5 中对迭代器进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508472/

相关文章:

scala - 如何结束或失败 AWS Glue 作业并出现错误?

scala - 如何将流式数据写入S3?

python - 如何使用此可迭代函数取消对列表的搜索?

c++ - 映射/设置迭代器在 C++ 中不可递增错误

data-structures - 在 Scala 中扩展现有的数据结构

Scala 空默认闭包?

scala - 如何对从 Enumerator[A] 到 Enumerator[Seq[A]] 的元素进行分组?

Java: `iterator.remove` 抛出 IllegalStateException

scala - Scala过滤器的收集类型

list - 如何创建具有特定类型的 List 的包装器