如何迭代Single <list <item >>,然后根据条件执行任务?

时间:2018-07-26 05:07:07

标签: android rx-java reactive-programming

我有一个返回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()
    }

1 个答案:

答案 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()
   }
}