У меня есть список потоков List[Stream[_]]
, размер списка известен в начале функции, размер каждого потока равен n
или n+1
. Я хотел бы получить поток чередования, например
def myMagicFold[A](s: List[Stream[A]]): Stream[A]
val streams = List(Stream(1,1,1),Stream(2,2,2),Stream(3,3),Stream(4,4))
val result = myMagicFold(streams)
//result = Stream(1,2,3,4,1,2,3,4,1,2)
Я использую fs2.Stream
. Мой первый дубль:
val result = streams.fold(fs2.Stream.empty){
case (s1, s2) => s1.interleaveAll(s2)
}
// result = Stream(1, 4, 3, 4, 2, 3, 1, 2, 1, 2)
Я ищу решение, основанное на основных операциях (map
, fold
, ...)