看起来好像在 scala 2.7.5中没有partition
方法(在 2.8 中有)。Iterator
我想有一个分区而不会失去 的懒惰,Iterator
所以以下不是一个选项:
itr.toList.partition( someTest(_) )
任何人都可以推荐一种在不实现我自己的方法的情况下执行此操作的partition
方法吗?例如,是否有某种方法可以将 anIterator
转换为 lazily-evaluate Stream
?
看起来好像在 scala 2.7.5中没有partition
方法(在 2.8 中有)。Iterator
我想有一个分区而不会失去 的懒惰,Iterator
所以以下不是一个选项:
itr.toList.partition( someTest(_) )
任何人都可以推荐一种在不实现我自己的方法的情况下执行此操作的partition
方法吗?例如,是否有某种方法可以将 anIterator
转换为 lazily-evaluate Stream
?
你试过这个Stream.fromIterator
方法吗?它产生一个包含给定迭代器元素的流:)。
一个例子是:
val iter = List(1,2,3,4).elements // just a simple iterator
val str = Stream.fromIterator(iter)
str.partition(_ >= 3)
希望它有所帮助(这是您的想法)。
编辑:只是一个例子来表明这是懒惰的(并且记住了 - 就像所有Stream
s 一样)。
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))
注意:留下一些输出,因为它非常冗长。
——弗拉维乌·西普西根