All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.twitter.algebird.Aggregator.scala Maven / Gradle / Ivy

The newest version!
package com.twitter.algebird

trait Aggregator[-A,B,+C] extends Function1[TraversableOnce[A], C] with java.io.Serializable {
  def prepare(input : A) : B
  def reduce(l : B, r : B) : B
  def present(reduction : B) : C

  def reduce(items : TraversableOnce[B]) : B = items.reduce{reduce(_,_)}
  def apply(inputs : TraversableOnce[A]) : C = present(reduce(inputs.map{prepare(_)}))
}

trait MonoidAggregator[-A,B,+C] extends Aggregator[A,B,C] {
  def monoid : Monoid[B]
  final def reduce(l : B, r : B) : B = monoid.plus(l, r)
  final override def reduce(items : TraversableOnce[B]) : B =
    if(items.isEmpty) monoid.zero
    else items.reduceLeft(reduce _)
}

trait RingAggregator[-A,B,+C] extends Aggregator[A,B,C] {
  def ring: Ring[B]
  final def reduce(l: B, r: B): B = ring.times(l,r)
  final override def reduce(items : TraversableOnce[B]) : B =
    if(items.isEmpty) ring.one // There are several pseudo-rings, so avoid one if you can
    else items.reduceLeft(reduce _)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy