Parallelize collection operations
Ox contains a number of methods which allow parallelizing operations on collections.
mapPar
import ox.mapPar
val input: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result: List[Int] = input.mapPar(4)(_ + 1)
// (2, 3, 4, 5, 6, 7, 8, 9, 10)
If any transformation fails, others are interrupted and mapPar
rethrows exception that was
thrown by the transformation. Parallelism
limits how many concurrent forks are going to process the collection.
foreachPar
import ox.foreachPar
val input: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
input.foreachPar(4)(i => println())
// prints each element of the list, might be in any order
Similar to mapPar
but doesn’t return anything.
filterPar
import ox.filterPar
val input: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result:List[Int] = input.filterPar(4)(_ % 2 == 0)
// (2, 4, 6, 8, 10)
Filters collection in parallel using provided predicate. If any predicate fails, rethrows the exception and other forks calculating predicates are interrupted.
collectPar
import ox.collectPar
val input: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result: List[Int] = input.collectPar(4) {
case i if i % 2 == 0 => i + 1
}
// (3, 5, 7, 9, 11)
Similar to mapPar
but only applies transformation to elements for which the partial function is defined. Other
elements are skipped.