以下代码使用Observable.from()
从列表中发出项目。对于每个项目,使用来自flatMap()
的{{1}}执行maxConcurrent值为1的Observable
。 devide.connectForPolice()
方法对当前项执行许多操作,并最终调用device.connectForPolice()
以继续下一个项目。这是代码:
Observable.just()
当此代码开始运行时,我将在屏幕上添加一个按钮,点击后我想“强制”原始mConnectingSubscription = Observable.from(mAdapter.getItems())
.flatMap(device -> {
return device.connectForPolice(device.getName());
}, 1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(String s) {
if (s.contains("str")) {
mAdapter.removeItem(s);
}
}
});
中的当前项目完成,以便列表中的下一个项目可以通过链条。它本质上是一个“跳过”或“完成”按钮。将其整合到这一系列事件中的最佳方法是什么?
答案 0 :(得分:0)
这取决于您想要实现的确切行为。如果足以忽略device.connectForPolice(device.getName())
的结果,则解决方案是微不足道的。只需将此流与另一个流合并,即表示此跳过按钮的点击次数,只占用1个项目,以先到者为准。
.flatMap(device -> {
return device.connectForPolice(device.getName())
.mergeWith(RxView.clicks(skipBtn).map(voidObject -> someString))
.take(1);
}, 1)
但是,我认为涉及大量计算,因此我认为您希望在用户决定跳过时中断它们。在这种情况下,我认为您必须编写自己的制作人并在其中监听点击以立即停止计算。