无限可观测到HashMap作为可观测

无限可观测到HashMap作为可观测,hashmap,rx-java,observable,reactive-programming,Hashmap,Rx Java,Observable,Reactive Programming,我仍在努力学习RxJava的一些基础知识,非常感谢您的帮助 我有一个无限的,热可观测的,它在一个简单的类中发出有规则标记的事件捕获,这个类有一个名称标记和一些属性。在这种情况下,标记是有限的,大约有10个不同的标记,但事件的细节每次都是不同的,比如一个时间戳 我现在要做的是创建一个HashMap,标记作为键,事件作为条目,这样HashMap本身就成为一个无限可观察的对象,每次更改都会发出HashMap 到目前为止,我使用了一个Subject来订阅原始的observable并发出HashMap,但

我仍在努力学习RxJava的一些基础知识,非常感谢您的帮助

我有一个无限的,热可观测的,它在一个简单的类中发出有规则标记的事件捕获,这个类有一个名称标记和一些属性。在这种情况下,标记是有限的,大约有10个不同的标记,但事件的细节每次都是不同的,比如一个时间戳

我现在要做的是创建一个HashMap,标记作为键,事件作为条目,这样HashMap本身就成为一个无限可观察的对象,每次更改都会发出HashMap

到目前为止,我使用了一个Subject来订阅原始的observable并发出HashMap,但我也看到了.toMap方法。然而,我不知道如何在一个无限可观测的源中使用该方法,并随着每次变化而发射。从文件上看,我甚至不清楚这是否可能


如果不可能,除了使用主题之外,还有其他方法可以达到同样的效果吗?我想保持精简,而且主题似乎很重

这是我的代码,将其转换为地图或可观测的。但我不知道你为什么要这么做

fun <T, K> Observable<T>.toInfiniteMap(keySelector: (T) -> K): Map<K, Observable<T>> {
    val map = ConcurrentHashMap<K, Observable<T>>()
    this.subscribeOn(Schedulers.newThread())
            .doOnNext { println(it) }
            .groupBy(keySelector)
            .doOnNext { map.put(it.getKey(), it) }
            .subscribe()
    return map
}

fun <T, K> Observable<T>.toInfiniteMapObservable(keySelector: (T) -> K):
        Observable<Map<K, Observable<T>>> {
    val map = ConcurrentHashMap<K, Observable<T>>()
    return this.subscribeOn(Schedulers.newThread())
            .doOnNext { println(it) }
            .groupBy(keySelector)
            .doOnNext { map.put(it.getKey(), it) }
            .map { map }
}
你想要一张地图还是一张可观察的地图?如果您希望可观察,可以使用groupBy。如果需要地图,可以将GroupedObservable收集到地图。