Infinite Observable 到 HashMap 作为 Observable

Posted

技术标签:

【中文标题】Infinite Observable 到 HashMap 作为 Observable【英文标题】:Infinite Observable to HashMap as Observable 【发布时间】:2017-07-22 17:06:44 【问题描述】:

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

我有一个无限的、热的可观察对象,它定期发出标记事件(在具有名称(标记)和一些属性的简单类中捕获)。标签是有限的(在这种情况下大约有 10 个不同的标签),但事件细节每次都不同(例如时间戳)。

我现在要做的是创建一个 HashMap,其中标签作为键,事件作为条目,这样 HashMap 本身就变成了一个无限的 observable,每次更改都会发出 HashMap。

到目前为止,我使用 Subject 订阅原始 observable 并发出 HashMap,但我也看到了“.toMap”方法。但是,我无法弄清楚如何将该方法与无限的可观察源一起使用并在每次更改时发出。从文档中我什至不清楚这是否可能。

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

【问题讨论】:

您想要MapObservable?如果你想要Observable,你可以使用groupBy。如果你想要Map,你可以将GroupedObservable收集到Map 【参考方案1】:

这是我的代码,将其转换为MapObservable<Map>。但我不知道你为什么需要这样做。

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 

【讨论】:

以上是关于Infinite Observable 到 HashMap 作为 Observable的主要内容,如果未能解决你的问题,请参考以下文章

B. Infinite Prefixes

json infinite recursion (stackoverflowerror)

使用INFINITE AJAX SCROLL实现下拉加载效果

题解 CF1260C Infinite Fence

RxJS 将 observable 附加到 typescript 中的 observable 数组列表

Codeforces 1295B - Infinite Prefixes