【问题标题】:Creating parallel executing List combinators创建并行执行的列表组合器
【发布时间】:2019-09-22 18:29:23
【问题描述】:

我有将 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] 逐元素拆分列表并并行执行带有元素的组合器。我该怎么做?

【问题讨论】:

  • list.par.filter(f)

标签: scala future


【解决方案1】:

要实现这个使用方法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))
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2023-03-19
    • 2017-09-26
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多