RxJava在列表上执行操作并返回一个observable

我是RxJava的新手(特别是RxJava2)而且我遇到了一些看似相对简单的操作的问题。 我需要从db获取一些数据,遍历数据(它表示为列表),对每个项执行操作,将数据包装在另一个对象中并返回。 这是我到目前为止:

mDataManager .getStuffList(id) .flatMapIterable(listOfStuff -> listOfStuff) .flatMap(item -> mDataManager .performCount(id, item.getTitle()) .doOnNext(item::setCounter) .takeLast(1) .map(counter -> item)) .toList() .toObservable() .flatMap(listOfStuff -> Observable.just(new StuffWrapper(listOfStuff)); 

我遇到的问题是我的数据管理器调用从未完成。 这个想法是,每当底层数据发生变化时,UI也会发生变化。 但是,如果不完成这些调用,toList()将不会发出该事件。

在RxJava 2中, toList返回一个Single :它相当于只有一个项目的Observable 。 您可以通过添加.toObservable将其转换为Observable,但通常.toObservable

关于您的其他更改, whenever the underlying data changes变化,您的意思是whenever the underlying data changes ? 您的数据管理员是否会通知您数据更改?

编辑:如果你的mDataManager.getStuffList(id)调用返回一个发出多个项目的Observable (也就是说,它永远不会完成但总是在更改后发出最新的数据集),那么你需要做这样的事情:

 mDataManager .getStuffList(id) .flatMap(listOfStuff -> Observable .from(listOfStuff) .flatMap(item -> mDataManager .performCount(id, item.getTitle()) .doOnNext(item::setCounter) .takeLast(1) .map(counter -> item) .toList() ) ) ...