Предположим, у меня есть функция fab: A => B
, последовательность A
и мне нужно получить последовательность пар (A, B)
, например:
def foo(fab: A => B, as: Seq[A]): Seq[(A, B)] = as.zip(as.map(fab))
Теперь я хочу запустить fab
одновременно используя scala.concurrent.Future
, но я хочу запустить fab
только один раз для всех дублирующих элементов в as
.Например,
val fab: A => B = ...
val a1: A = ...
val a2: A = ...
val as = a1 :: a1 :: a2 :: a1 :: a2 :: Nil
foo(fab, as) // invokes fab twice and run these invocations concurrently
Как бы вы это реализовали?