summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/TraversableLike.scala
diff options
context:
space:
mode:
authorAntonio Cunei <antonio.cunei@epfl.ch>2010-06-16 18:46:28 +0000
committerAntonio Cunei <antonio.cunei@epfl.ch>2010-06-16 18:46:28 +0000
commitb9034f4cd52ad6cc8c77da09f3170593672dea03 (patch)
tree6dcc92fd0d5b13bf74b162c07cb9ec3d18e3070d /src/library/scala/collection/TraversableLike.scala
parentfd9ddea91f21ede82cb9083c24e91c3b47da178b (diff)
downloadscala-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.scala15
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.