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 | |
parent | fd9ddea91f21ede82cb9083c24e91c3b47da178b (diff) | |
download | scala-b9034f4cd52ad6cc8c77da09f3170593672dea03.tar.gz scala-b9034f4cd52ad6cc8c77da09f3170593672dea03.tar.bz2 scala-b9034f4cd52ad6cc8c77da09f3170593672dea03.zip |
first part of r22260
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/collection/TraversableLike.scala | 15 | ||||
-rw-r--r-- | src/library/scala/collection/TraversableProxyLike.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/TraversableViewLike.scala | 2 |
3 files changed, 10 insertions, 9 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. diff --git a/src/library/scala/collection/TraversableProxyLike.scala b/src/library/scala/collection/TraversableProxyLike.scala index 05c4c44f12..f2d91ded0c 100644 --- a/src/library/scala/collection/TraversableProxyLike.scala +++ b/src/library/scala/collection/TraversableProxyLike.scala @@ -37,7 +37,7 @@ trait TraversableProxyLike[+A, +Repr <: TraversableLike[A, Repr] with Traversabl override def filterNot(p: A => Boolean): Repr = self.filterNot(p) override def collect[B, That](pf: PartialFunction[A, B])(implicit bf: CanBuildFrom[Repr, B, That]): That = self.collect(pf)(bf) override def partition(p: A => Boolean): (Repr, Repr) = self.partition(p) - override def groupBy[K](f: A => K): Map[K, Repr] = self.groupBy(f) + override def groupBy[K](f: A => K): immutable.Map[K, Repr] = self.groupBy(f) override def forall(p: A => Boolean): Boolean = self.forall(p) override def exists(p: A => Boolean): Boolean = self.exists(p) override def count(p: A => Boolean): Int = self.count(p) diff --git a/src/library/scala/collection/TraversableViewLike.scala b/src/library/scala/collection/TraversableViewLike.scala index 7b443e54b8..9b5be82dd6 100644 --- a/src/library/scala/collection/TraversableViewLike.scala +++ b/src/library/scala/collection/TraversableViewLike.scala @@ -216,7 +216,7 @@ self => override def scanRight[B, That](z: B)(op: (A, B) => B)(implicit bf: CanBuildFrom[This, B, That]): That = newForced(thisSeq.scanRight(z)(op)).asInstanceOf[That] - override def groupBy[K](f: A => K): Map[K, This] = + override def groupBy[K](f: A => K): immutable.Map[K, This] = thisSeq.groupBy(f).mapValues(xs => newForced(xs).asInstanceOf[This]) override def stringPrefix = "TraversableView" |