Вы пробовали метод 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))
NB: пропущен какой-то вывод, поскольку он был довольно многословным.
- Флавиу Чипчиган