Я пытаюсь использовать scalaz-stream
для обработки нескольких файлов одновременно, применяя одну функцию к каждой строке в файлах по всем файлам. Для конкретности, предположим, что у меня есть функция, которая принимает список строкОбработка нескольких файлов параллельно с потоками scalaz
def f(lines: Seq[String]): Something = ???
и пару файлов, первый:
foo1
foo2
foo3
второй:
bar1
bar2
bar3
Результат всего процесса:
List(
f(Seq("foo1", "bar1")),
f(Seq("foo2", "bar2")),
f(Seq("foo3", "bar3"))
)
(или, скорее всего, написан непосредственно в каком-либо другом файле)
Количество файлов неизвестно заранее, а количество строк может варьироваться в зависимости от разных файлов, но я в порядке с заполнением (во время выполнения) концы более коротких файлов со значениями по умолчанию или вырезание более длинных файлов.
По существу, мне нужен способ объединить Seq[Process[Task, String]]
(полученный через что-то вроде io.linesR
) в один Process[Task, Seq[String]]
.
Какой будет самый простой способ достичь этого?
Или, в общем, как я могу объединить n
экземпляры Process[F, I]
в одном экземпляре Process[F, Seq[I]]
?
Я уверен, что есть какая-то стандартная комбинатор для этой цели, но я не был в состоянии понять это ...
Спасибо.
Спасибо за ответ, попробуем и реализуем его в моем случае использования (и последующий запрос тянуть, если это хорошо). Хотя я не совсем уверен, что вы подразумеваете под «сбалансированным» в этом контексте. – ncreep
Сбалансированным я имею в виду сбалансированное дерево восстановления, поэтому 'zip (zip (a1, a2), zip (a3, a4))', а не 'zip (zip (zip (a1, a2), a3), a4)' , – pchiusano