@@ -102,6 +102,7 @@ trait Observable[+T]
102
102
import scala .collection .JavaConverters ._
103
103
import scala .collection .Seq
104
104
import scala .concurrent .duration .{Duration , TimeUnit , MILLISECONDS }
105
+ import scala .collection .mutable
105
106
import rx .functions ._
106
107
import rx .lang .scala .observables .BlockingObservable
107
108
import ImplicitFunctionConversions ._
@@ -3891,10 +3892,8 @@ trait Observable[+T]
3891
3892
* @return an Observable that emits a single item: a `Map` that contains an `Seq` of items mapped from
3892
3893
* the source Observable
3893
3894
*/
3894
- def toMultimap [K ](keySelector : T => K ): Observable [Map [K , Seq [T ]]] = {
3895
- val thisJava = asJavaObservable.asInstanceOf [rx.Observable [T ]]
3896
- val o : rx.Observable [java.util.Map [K , java.util.Collection [T ]]] = thisJava.toMultimap[K ](keySelector)
3897
- toScalaObservable[java.util.Map [K , java.util.Collection [T ]]](o).map(m => m.toMap.mapValues(_.toSeq))
3895
+ def toMultimap [K ](keySelector : T => K ): Observable [scala.collection.Map [K , Seq [T ]]] = {
3896
+ toMultimap(keySelector, k => k)
3898
3897
}
3899
3898
3900
3899
/**
@@ -3909,10 +3908,8 @@ trait Observable[+T]
3909
3908
* @return an Observable that emits a single item: a `Map` that contains an `Seq` of items mapped from
3910
3909
* the source Observable
3911
3910
*/
3912
- def toMultimap [K , V ](keySelector : T => K , valueSelector : T => V ): Observable [Map [K , Seq [V ]]] = {
3913
- val thisJava = asJavaObservable.asInstanceOf [rx.Observable [T ]]
3914
- val o : rx.Observable [java.util.Map [K , java.util.Collection [V ]]] = thisJava.toMultimap[K , V ](keySelector, valueSelector)
3915
- toScalaObservable[java.util.Map [K , java.util.Collection [V ]]](o).map(m => m.toMap.mapValues(_.toSeq))
3911
+ def toMultimap [K , V ](keySelector : T => K , valueSelector : T => V ): Observable [scala.collection.Map [K , Seq [V ]]] = {
3912
+ toMultimap(keySelector, valueSelector, () => mutable.Map [K , mutable.Buffer [V ]]())
3916
3913
}
3917
3914
3918
3915
/**
@@ -3928,10 +3925,8 @@ trait Observable[+T]
3928
3925
* @return an Observable that emits a single item: a `Map` that contains a `Seq` items mapped from the source
3929
3926
* Observable
3930
3927
*/
3931
- def toMultimap [K , V ](keySelector : T => K , valueSelector : T => V , mapFactory : () => Map [K , Seq [V ]]): Observable [Map [K , Seq [V ]]] = {
3932
- val thisJava = asJavaObservable.asInstanceOf [rx.Observable [T ]]
3933
- val o : rx.Observable [java.util.Map [K , java.util.Collection [V ]]] = thisJava.toMultimap[K , V ](keySelector, valueSelector)
3934
- toScalaObservable[java.util.Map [K , java.util.Collection [V ]]](o).map(m => mapFactory() ++ m.toMap.mapValues(_.toSeq))
3928
+ def toMultimap [K , V ](keySelector : T => K , valueSelector : T => V , mapFactory : () => mutable.Map [K , mutable.Buffer [V ]]): Observable [scala.collection.Map [K , Seq [V ]]] = {
3929
+ toMultimap(keySelector, valueSelector, mapFactory, k => mutable.ListBuffer [V ]())
3935
3930
}
3936
3931
3937
3932
/**
@@ -3948,12 +3943,24 @@ trait Observable[+T]
3948
3943
* @return an Observable that emits a single item: a `Map` that contains the `Seq` of mapped items from
3949
3944
* the source Observable
3950
3945
*/
3951
- def toMultimap [K , V ](keySelector : T => K , valueSelector : T => V , mapFactory : () => Map [K , Seq [V ]], collectionFactory : K => Seq [V ]): Observable [Map [K , Seq [V ]]] = {
3952
- val thisJava = asJavaObservable.asInstanceOf [rx.Observable [T ]]
3953
- val o : rx.Observable [java.util.Map [K , java.util.Collection [V ]]] = thisJava.toMultimap[K , V ](keySelector, valueSelector)
3954
- toScalaObservable[java.util.Map [K , java.util.Collection [V ]]](o).map {
3955
- m => mapFactory() ++ m.toMap.map {
3956
- case (k : K , v : java.util.Collection [V ]) => (k, collectionFactory(k) ++ v)
3946
+ def toMultimap [K , V ](keySelector : T => K , valueSelector : T => V , mapFactory : () => mutable.Map [K , mutable.Buffer [V ]], collectionFactory : K => mutable.Buffer [V ]): Observable [scala.collection.Map [K , Seq [V ]]] = {
3947
+ lift {
3948
+ (subscriber : Subscriber [scala.collection.Map [K , Seq [V ]]]) => {
3949
+ val map = mapFactory().withDefault(collectionFactory)
3950
+ Subscriber [T ](
3951
+ subscriber,
3952
+ (t : T ) => {
3953
+ val key = keySelector(t)
3954
+ val value = map(key)
3955
+ value += valueSelector(t)
3956
+ map += key -> value : Unit
3957
+ },
3958
+ e => subscriber.onError(e),
3959
+ () => {
3960
+ subscriber.onNext(map)
3961
+ subscriber.onCompleted()
3962
+ }
3963
+ )
3957
3964
}
3958
3965
}
3959
3966
}
0 commit comments