Предположим, у меня есть генератор, который возвращает мне некоторые результаты распались на куски, что я хочу, чтобы тянуть в виде плоского списка:takeUntil? Обработка помеченного ввода. Как?
def pull(chunk: Chunk, result: Stream[Item] = Stream.empty): Stream[Item] = {
val soFar = chunk.items ++ result
if(chunk.hasNext) pull(generator.next(chunk), soFar) else soFar
}
Концептуально, это то, что я хочу, за исключением того, она извлекает все содержимое заранее, и я хочу, чтобы он ленился. Что-то вроде этого:
Stream.iterate(generator.first)(generator.next)
.takeWhile(_.hasNext)
.flatMap(_.items)
почти работает, но он удаляет последний кусок.
Кажется, мне нужен .takeUntil
здесь: как takeWhile
, но пройти всю цепочку перед завершением. Как я могу сделать это идиоматично?
Родственные? http://stackoverflow.com/questions/33602714/how-to-implement-takeuntil-of-a-list –
@ evan058, что мало помогает, потому что '.span' материализует все это заранее. : / – Dima