У меня есть поток неупорядоченных measurements
, которые я хотел бы сгруппировать в пакеты фиксированного размера, чтобы я мог эффективно сохранить их позже:
val measurements = for {
id <- Seq("foo", "bar", "baz")
value <- 1 to 5
} yield (id, value)
fs2.Stream.emits(scala.util.Random.shuffle(measurements)).toVector
То есть вместо:
(bar,4)
(foo,5)
(baz,3)
(baz,5)
(baz,4)
(foo,2)
(bar,2)
(foo,4)
(baz,1)
(foo,1)
(foo,3)
(bar,1)
(bar,5)
(bar,3)
(baz,2)
Я хотел бы иметь следующую структуру для размера пакета, равного 3
:
(bar,[4,2,1])
(foo,[5,2,4])
(baz,[3,5,4])
(baz,[1,2])
(foo,[1,3])
(bar,[5,3])
Есть ли простой идиоматический способ добиться этого в FS2? Я знаю, что есть функция groupAdjacentBy , но она будет учитывать только соседние элементы.
Я сейчас на 0.10.5
.