首页 > 解决方案 > 创建并行执行的列表组合器

问题描述

我有将 List[B] 分成两半并返回元组的函数。我需要释放组合器以并行执行它们。

如果我做类似 fl.map(x => x.map(...)) 的事情,它不是平行的。

object Parallel {

  implicit class ParList[A](fl: Future[List[A]]) {

    private def split[B](l: List[B]): (List[B], List[B]) = l.splitAt(l.length / 2)

    def paralFilter(f: A => Boolean): Future[List[A]] = ???

    def paralFold(init: A)(f: (A, A) => A): Future[A] = ???
  }

我知道我必须通过 split[B] 逐元素拆分列表并并行执行带有元素的组合器。我该怎么做?

标签: scalafuture

解决方案


要实现这个使用方法parscala.collection.Parallelizable

object Parallel {

  implicit class ParList[A](fl: Future[List[A]]) {

    private def split[B](l: List[B]): (List[B], List[B]) = l.splitAt(l.length / 2)

    def paralFilter(f: A => Boolean)(implicit ec:ExecutionContext): Future[List[A]] = 
      fl.map(_.par.filter(f).toList)

    def paralFold(init: A)(f: (A, A) => A)(implicit ec:ExecutionContext): Future[A] =
      fl.map(_.par.fold(init)(f))
  }
}

推荐阅读