summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Cunei <antonio.cunei@epfl.ch>2010-06-16 18:48:20 +0000
committerAntonio Cunei <antonio.cunei@epfl.ch>2010-06-16 18:48:20 +0000
commit354e2abd2ed353349c533f025ec24adecbbac86f (patch)
treec58c5a52d2aa64476b75357fb9c310b259847ba3
parent2e32d71a48ffcb4ff7f92b9c469dd88d5c8b4d8d (diff)
downloadscala-354e2abd2ed353349c533f025ec24adecbbac86f.tar.gz
scala-354e2abd2ed353349c533f025ec24adecbbac86f.tar.bz2
scala-354e2abd2ed353349c533f025ec24adecbbac86f.zip
Merged revisions 22325 via svnmerge from
https://lampsvn.epfl.ch/svn-repos/scala/scala/trunk ........ r22325 | cunei | 2010-06-16 20:46:28 +0200 (Wed, 16 Jun 2010) | 2 lines first part of r22260 ........
-rw-r--r--src/library/scala/collection/TraversableLike.scala15
-rw-r--r--src/library/scala/collection/TraversableProxyLike.scala2
-rw-r--r--src/library/scala/collection/TraversableViewLike.scala2
-rw-r--r--test/files/run/colltest1.scala4
4 files changed, 12 insertions, 11 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"
diff --git a/test/files/run/colltest1.scala b/test/files/run/colltest1.scala
index 943fe4c4e7..dd9ecdbd5e 100644
--- a/test/files/run/colltest1.scala
+++ b/test/files/run/colltest1.scala
@@ -29,8 +29,8 @@ object Test extends Application {
val (o, e) = ten.partition(_ % 2 == 0)
assert(o.size == e.size)
val gs = ten groupBy (x => x / 4)
- val vs1 = (for (k <- gs.keysIterator; v <- gs(k).toIterable.iterator) yield v).toList
- val vs2 = gs.values.toList.flatten
+ val vs1 = (for (k <- gs.keysIterator; v <- gs(k).toIterable.iterator) yield v).toList.sorted
+ val vs2 = gs.values.toList.flatten.sorted
// val vs2 = gs.values.toList flatMap (xs => xs)
assert(ten.head == 1)
assert(ten.tail.head == 2)