Say we want to make a function like minBy
that returns all elements of equal minimalism in a collection:
def multiMinBy[A, B: Ordering](xs: Trav
How about using CanBuildFrom
?
import scala.collection.immutable._
import scala.collection.generic._
def multiMinBy[A, B, From[X] <: Traversable[X], To](xs: From[A])(f: A => B)
(implicit ord: Ordering[B], bf: CanBuildFrom[From[_], A, To]) = {
val minVal = f(xs minBy f)
val b = bf()
b ++= (xs filter (f(_) == minVal))
b.result
}
scala> multiMinBy(List("zza","zzza","zzb","zzzb"))(_.last)
res1: List[java.lang.String] = List(zza, zzza)