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() ) ) ...