我有一个返回Single<List<Item>>
的方法,迭代列表的唯一方法是访问flattenAsObservable()
:
getListOfItems()
.flattenAsObservable {items -> items}
.flatMapSingle { item ->
doSomethingWith(item)
}
在doSomethingWith(item)
中,我更新数据库中的item
对象。
现在,我要在数据库中“计数”更新的项目,如果它们是N,则执行另一个更新。
我正在寻找类似的东西
getListOfItems()
.flattenAsObservable { items -> items }
.flatMapSingle { item ->
doSomethingWith(item)
}
.flatMapSingle { items -> items } // I can't access items here, obviously.
// I think I need another call to
// getListOfItems() and then filter(),
// but don't know how to do that.
.filter{ items.size() == X }
.flatMapSingle {
doSomething()
}
答案 0 :(得分:1)
保留原始项目标签,然后再次构建一个新列表。但是请注意,您尚未为doSomethingWith
定义数据类型,因此我假设它们返回一些Single
值。
getListOfItems()
.flattenAsObservable { items -> items }
.flatMapSingle { item ->
doSomethingWith(item).map { item }
}
.toList()
.flatMap {
if (it.size() == N) {
doSomething()
} else {
Single.just(it); // make it return something with the same type as doSomething()
}
}