5
假设我有一台发电机,它返回我一些成绩分成块,我想拉成一个平坦的列表: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