diff options
author | Antonio Cunei <antonio.cunei@epfl.ch> | 2010-06-16 18:46:28 +0000 |
---|---|---|
committer | Antonio Cunei <antonio.cunei@epfl.ch> | 2010-06-16 18:46:28 +0000 |
commit | b9034f4cd52ad6cc8c77da09f3170593672dea03 (patch) | |
tree | 6dcc92fd0d5b13bf74b162c07cb9ec3d18e3070d /src/library/scala/collection/TraversableLike.scala | |
parent | fd9ddea91f21ede82cb9083c24e91c3b47da178b (diff) | |
download | scala-b9034f4cd52ad6cc8c77da09f3170593672dea03.tar.gz scala-b9034f4cd52ad6cc8c77da09f3170593672dea03.tar.bz2 scala-b9034f4cd52ad6cc8c77da09f3170593672dea03.zip |
first part of r22260
Diffstat (limited to 'src/library/scala/collection/TraversableLike.scala')
-rw-r--r-- | src/library/scala/collection/TraversableLike.scala | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala index 04d9002eae..2169dcdd02 100644 --- a/src/library/scala/collection/TraversableLike.scala +++ b/src/library/scala/collection/TraversableLike.scala @@ -330,17 +330,18 @@ trait TraversableLike[+A, +Repr] extends HasNewBuilder[A, Repr] * for which `f(x)` equals `k`. * */ - def groupBy[K](f: A => K): Map[K, Repr] = { - var m = Map[K, Builder[A, Repr]]() + def groupBy[K](f: A => K): immutable.Map[K, Repr] = { + val m = mutable.Map.empty[K, Builder[A, Repr]] for (elem <- this) { val key = f(elem) - val bldr = m get key match { - case None => val b = newBuilder; m = m updated (key, b); b - case Some(b) => b - } + val bldr = m.getOrElseUpdate(key, newBuilder) bldr += elem } - m map { case (k, b) => (k, b.result) } + val b = immutable.Map.newBuilder[K, Repr] + for ((k, v) <- m) + b += ((k, v.result)) + + b.result } /** Tests whether a predicate holds for all elements of this $coll. |