我有2个不断更新的状态:
这两个状态都由两个相应的直播流代表。确切地说,此上下文中的 state 只是一个虚拟视图,其中包含从流接收的数据的最新版本。我需要提供以下数据的实时流:产品ID,产品名称,美元价格。
这意味着我需要left join
之类的内容,但需要流式数据。
为此,我尝试使用 RxJava groupJoin
,但我遇到了两个问题:
groupJoin
仅为每个版本提供最新版本的数据
stream(加入产品或上一个产品的最后一种货币汇率)
版本与费率合并)。我该如何解决这些问题? RxJava 适用于我的目的吗?
答案 0 :(得分:0)
尝试使用ConcurrentHashMap<K,V>
检索操作(包括get)一般不会阻塞,所以可能 与更新操作重叠(包括put和remove)。检索 反映最近完成的更新操作的结果 坚持他们的发作。对于诸如putAll和。之类的聚合操作 清除,并发检索可能仅反映插入或删除 一些条目。同样,Iterators和Enumerations返回元素 反映哈希表的状态在某个时刻或之后的某个时刻 创建迭代器/枚举。他们不扔 ConcurrentModificationException的。但是,迭代器的设计是 一次仅由一个线程使用
引自Documentaiton of ConcurrentHashMap 我认为是您想要和需要的最佳选择。
答案 1 :(得分:0)
我认为您正在寻找CombineLatest运营商。它的工作方式类似于zip
操作,但每次任何源observables发出项目时都会发出新项目。
使用此运算符,您将始终获得最新的ProductState
和CurrencyRate
。
你可以这样做(Kotlin语法):
Observable.combineLatest(productStream, currencyStream) { product, currency ->
NewView(product.id, product.name, product.price * currency.rate)
}