【发布时间】:2018-08-08 15:35:30
【问题描述】:
我是一个 RxJava 新手。我已经掌握了窍门,但有一种情况我不太满意。假设我有一对旨在协同工作的不同类型的 Observable。例如:
val list: Observable<List<MyClass>>
val indexIntoList: Observable<Int>
所以,我需要将它们作为一对观察,以便观察者在 either list 或 indexIntoList 获得更新时发出。现在我的解决方案是这样的:
var lastListUsed: List<MyClass> = ArrayList()
var lastIndexUsed = -1
val syncObject = Object()
init {
list.subscribe(object: Observer<List<MyClass>>{
.
.
.
override fun onNext(t: List<MyClass>)
{
FunctionOnMyClass(t, lastIndexUsed)
}
})
indexIntoList.subscribe(object: Observer<Int>{
.
.
.
override fun onNext(t: Int)
{
FunctionOnMyClass(lastListUsed, t)
}
})
}
fun FunctionOnMyClass(list: List<MyClass>, index: Int)
{
synchronized(syncObject)
{
lastListUsed = list
lastIndexUsed = index
.
.
.
}
}
我曾想过做这样的事情:
var lastMyClass = DefaultMyClass()
list.doOnNext{listVersion ->
indexIntoMap.map{ index ->
if(index in listVersion.indices)
listVersion[index]
else
lastMyClass
}.subscribe(object: Observer<MyClass>{
.
.
.
override fun onNext(t: MyClass)
{
lastMyClass = t
.
.
.
}
})
}
但如果我理解正确,要使用这种方法,每次外部 Observable 更新时,我都必须在内部 Observable 上处理 Disposable。我宁愿不那样做。有处理这种情况的首选方法吗?我应该愿意在每次更新外部 Observable 时处理 Disposable 吗?
【问题讨论】:
-
嘿,我对 Kotlin 不太熟悉,而且我也是 RxJava 的新手,但我之前确实使用过它来链接多个可观察对象,不确定这是否是您想要的,但您可以链接 observables 的输出是你想要的吗?
-
如果你想配对它们,你可以使用this这样的zip运算符