我有以下代码:
model.getCategories()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Category>>()
{
@Override
public void call(final List<Category> categories)
{
model.getUnits()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Unit>>()
{
@Override
public void call(List<Unit> units)
{
view.showAddProductDialog(units, categories);
}
});
}
});
我有这种丑陋的筑巢。我该如何解决呢? 我试过这样的事情:
Single.concat(model.getCategories(), model.getUnits())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<? extends Object>>()
{
@Override
public void call(List<? extends Object> objects)
{
// do something
}
});
但问题是我无法确定是List<Category>
还是List<Unit>
。
有没有办法使用concat
并检测哪种类型的流(List<Category>
或List<Unit>
或其他内容)?
此外,我需要检测所有观察者是否已完成以执行其他操作。
感谢您的建议。
答案 0 :(得分:2)
使用Single.zip()
:
Single.zip(
getCategories().subscribeOn(Schedulers.io()),
getUnits().subscribeOn(Schedulers.io()),
(a, b) -> Pair.of(a, b)
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
pair -> view.showAddProductDialog(pair.first, pair.second),
error -> showError(error.toString())
)
其中Pair
可以是任何元组实现,即this。