收集数组列表中的所有可观察字符串

Collect all observable strings in array list

我有一个 map 包含 key/value 对。从这个 map 我通过流式传输到数据库 returns 结果 Observable<String> 来存储它们。

当我尝试不阻塞地访问这个字符串并将其放入列表时,我的问题就来了。

它总是空的。这是我的实现:

public Observable<List<String>> uploadKeys(Map<String, String> entries) {
       final List<String> collection = new ArrayList<>();
       entries.entrySet().stream()
              .forEach(entry -> storeKeysInTheDb(entry.getKey(), entry.getValue()).map(element -> element.isEmpty() ? "" : collection.add(element)));
       return Observable.just(collection);
}

您必须订阅 storeKeysInTheDb() 返回的 observable;在您订阅之前,没有任何反应,也没有字符串结果。

public Observable<List<String>> uploadKeys(Map<String,String> entries) {
  return Observable.fromIterable( entries.entrySet )
           .flatMap( entry -> storeKeysInTheDb( entry.getKey(), entry.getValue() )
           .filter(element -> !element.isEmpty())
           .toList();
}

当您订阅生成的可观察对象时,条目将被映射和存储,生成的元素将作为列表发出。