Załóżmy, że mam generator, który zwraca mi jakieś wyniki podzielone na kawałki, że chcę, aby pociągnąć do płaskiej listy:takeUntil? Przetwarzanie fragmentów wejściowych. W jaki sposób?
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
}
Koncepcyjnie jest to, co chcę, z wyjątkiem, że pobiera całą zawartość z góry i chcę, żeby to było leniwe. coś takiego:
Stream.iterate(generator.first)(generator.next)
.takeWhile(_.hasNext)
.flatMap(_.items)
prawie działa, ale odrzuca ostatni kawałek.
Wygląda na to, że potrzebuję tutaj .takeUntil
: jak takeWhile
, ale przed zakończeniem przejdź przez cały łańcuch. Jak zrobić to idiomatycznie?
Powiązany? http://stackoverflow.com/questions/33602714/how-to-implement-takeuntil-of-a-list –
@ evan058, które nie pomaga wiele, ponieważ '.span' materializuje całą sprawę z góry. : / – Dima