代码之家  ›  专栏  ›  技术社区  ›  Jorge E. Hernández

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

  •  2
  • Jorge E. Hernández  · 技术社区  · 6 年前

    我有一个方法返回 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 回复  |  直到 6 年前
        1
  •  1
  •   akarnokd    6 年前

    保持原始项目的标签,并重新建立一个新的列表。但是请注意,您还没有将数据类型定义为 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()
       }
    }