scala - 创建并行执行的列表组合器
问题描述
我有将 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] 逐元素拆分列表并并行执行带有元素的组合器。我该怎么做?
解决方案
要实现这个使用方法par
:scala.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))
}
}
推荐阅读
- android - 如何忽略 NFC 意图(使手机不振动)?
- angular - Angular 渲染的 DOM html 自定义属性
- python - Odoo 10 - 与 CRON 一起使用
- python - 如何在 Django 管理中为字段添加填充?
- c# - 如何使用双键删除列表中的重复对象
- powershell - 在 PowerShell 中查找具有不同文件名的最后修改的文件
- haskell - 如何为强制长度为 2^n 的向量类型定义可用的 Applicative 实例
- python - 使用 Telethon 库开发网关 - (Telegram)
- java - 适配器在对 SQLite 数据库中的项目进行排序后使所有项目未排序?
- java - 是否可以知道注释方法是否被覆盖(布尔值)?