有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java RxJava对列表执行操作并返回可观察的

我对RxJava(特别是RxJava2)还不熟悉,而且我对一个似乎相对简单的操作有些困难。我需要从数据库中获取一些数据,遍历数据(它被表示为一个列表),对每个项执行操作,将数据包装到另一个对象中并返回。这就是我目前的情况:

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()将不会发出事件


共 (1) 个答案

  1. # 1 楼答案

    在rxjava2中,toList返回一个Single:它相当于只包含一个项的Observable。你可以通过添加.toObservable将其转换为可观察的,但这并不经常需要

    关于你的其他变化,你所说的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()
        )
    )
    ...