2

scala 2.7.5 にはpartitionメソッドがないように見えます(2.8 にはあります)。の怠惰さをIterator失わずにパーティションを作成したいので、次のオプションはありません。Iterator

itr.toList.partition( someTest(_) )

自分のpartition方法を実装せずにこれを行う方法を誰かが推奨できますか? たとえば、Iteratorを遅延評価されたに変換する方法はありStreamますか?

4

1 に答える 1

8

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))

注意:非常に冗長だったため、一部の出力は省略しました。

--Flaviu Cipcigan

于 2009-10-02T10:56:40.950 に答える