@@ -16,25 +16,25 @@ package next
1616private [next] final class NextIterableOnceOpsExtensions [A , CC [_], C ](
1717 private val col : IterableOnceOps [A , CC , C ]
1818) extends AnyVal {
19- import NextIterableOnceOpsExtensions .{GroupMapGen , GroupMapGenGen }
19+ import NextIterableOnceOpsExtensions .{GroupMapToView , GroupMapView }
2020
21- def groupBy [K ](key : A => K )(implicit valuesFactory : Factory [A , C ]): immutable.Map [K , C ] =
22- groupByGen (key).result
21+ def groupBy [K ](key : A => K )(implicit groupsFactory : Factory [A , C ]): immutable.Map [K , C ] =
22+ viewGroupByTo (key).toMap
2323
24- def groupByGen [K ](key : A => K )(implicit valuesFactory : Factory [A , C ]): GroupMapGen [A , K , A , C ] =
25- groupByGenGen (key).collectValuesAs(valuesFactory )
24+ def viewGroupByTo [K ](key : A => K )(implicit groupsFactory : Factory [A , C ]): GroupMapToView [A , K , A , C ] =
25+ viewGroupBy (key).collectGroupsTo(groupsFactory )
2626
27- def groupByGenGen [K ](key : A => K ): GroupMapGenGen [A , K , A ] =
28- groupMapGenGen (key)(identity)
27+ def viewGroupBy [K ](key : A => K ): GroupMapView [A , K , A ] =
28+ viewGroupMap (key)(identity)
2929
30- def groupMap [K , V ](key : A => K )(f : A => V )(implicit valuesFactory : Factory [V , CC [V ]]): immutable.Map [K , CC [V ]] =
31- groupMapGen (key)(f).result
30+ def groupMap [K , V ](key : A => K )(f : A => V )(implicit groupsFactory : Factory [V , CC [V ]]): immutable.Map [K , CC [V ]] =
31+ viewGroupMapTo (key)(f).toMap
3232
33- def groupMapGen [K , V ](key : A => K )(f : A => V )(implicit valuesFactory : Factory [V , CC [V ]]): GroupMapGen [A , K , V , CC [V ]] =
34- groupMapGenGen (key)(f).collectValuesAs(valuesFactory )
33+ def viewGroupMapTo [K , V ](key : A => K )(f : A => V )(implicit groupsFactory : Factory [V , CC [V ]]): GroupMapToView [A , K , V , CC [V ]] =
34+ viewGroupMap (key)(f).collectGroupsTo(groupsFactory )
3535
36- def groupMapGenGen [K , V ](key : A => K )(f : A => V ): GroupMapGenGen [A , K , V ] =
37- new GroupMapGenGen (col, key, f)
36+ def viewGroupMap [K , V ](key : A => K )(f : A => V ): GroupMapView [A , K , V ] =
37+ new GroupMapView (col, key, f)
3838
3939 /**
4040 * Partitions this IterableOnce into a map according to a discriminator function `key`. All the values that
@@ -49,19 +49,16 @@ private[next] final class NextIterableOnceOpsExtensions[A, CC[_], C](
4949 * @note This will force the evaluation of the Iterator.
5050 */
5151 def groupMapReduce [K , V ](key : A => K )(f : A => V )(reduce : (V , V ) => V ): immutable.Map [K , V ] =
52- groupMapGenGen (key)(f).reduceValues (reduce)
52+ viewGroupMap (key)(f).reduceValuesTo(immutable. Map ) (reduce)
5353}
5454
5555private [next] object NextIterableOnceOpsExtensions {
56- final class GroupMapGenGen [A , K , V ] private [NextIterableOnceOpsExtensions ](
56+ final class GroupMapView [A , K , V ] private [NextIterableOnceOpsExtensions ](
5757 col : IterableOnceOps [A , AnyConstr , _],
5858 key : A => K ,
5959 f : A => V
6060 ) {
61- def reduceValues (reduce : (V , V ) => V ): immutable.Map [K , V ] =
62- reduceValuesAs(immutable.Map )(reduce)
63-
64- def reduceValuesAs [MC ](resultFactory : Factory [(K , V ), MC ])(reduce : (V , V ) => V ): MC = {
61+ def reduceValuesTo [MC ](resultFactory : Factory [(K , V ), MC ])(reduce : (V , V ) => V ): MC = {
6562 val m = mutable.Map .empty[K , V ]
6663 col.foreach { elem =>
6764 m.updateWith(key = key(elem)) {
@@ -72,27 +69,27 @@ private[next] object NextIterableOnceOpsExtensions {
7269 resultFactory.fromSpecific(m)
7370 }
7471
75- def collectValuesAs [C ](valuesFactory : Factory [V , C ]): GroupMapGen [A , K , V , C ] =
76- new GroupMapGen (col, key, f, valuesFactory )
72+ def collectGroupsTo [C ](groupsFactory : Factory [V , C ]): GroupMapToView [A , K , V , C ] =
73+ new GroupMapToView (col, key, f, groupsFactory )
7774 }
7875
79- final class GroupMapGen [A , K , V , C ] private [NextIterableOnceOpsExtensions ](
76+ final class GroupMapToView [A , K , V , C ] private [NextIterableOnceOpsExtensions ](
8077 col : IterableOnceOps [A , AnyConstr , _],
8178 key : A => K ,
8279 f : A => V ,
83- valuesFactory : Factory [V , C ]
80+ groupsFactory : Factory [V , C ]
8481 ) {
85- def result : immutable.Map [K , C ] =
86- resultAs (immutable.Map )
82+ def toMap : immutable.Map [K , C ] =
83+ to (immutable.Map )
8784
88- def resultAs [MC ](resultFactory : Factory [(K , C ), MC ]): MC = {
85+ def to [MC ](resultFactory : Factory [(K , C ), MC ]): MC = {
8986 val m = mutable.Map .empty[K , mutable.Builder [V , C ]]
9087 col.foreach { elem =>
9188 val k = key(elem)
9289 val v = f(elem)
9390 m.get(k) match {
9491 case Some (builder) => builder.addOne(v)
95- case None => m.update(key = k, value = valuesFactory .newBuilder.addOne(v))
92+ case None => m.update(key = k, value = groupsFactory .newBuilder.addOne(v))
9693 }
9794 }
9895 resultFactory.fromSpecific(m.view.mapValues(_.result()))
0 commit comments