【问题标题】:RxJava: wait another observable resultRxJava:等待另一个可观察的结果
【发布时间】:2016-05-18 15:34:08
【问题描述】:

如何在转换当前结果时等待另一个可观察结果?

我有一个用户 ID 列表 (userIdsList),我应该将它们转换为地图。在map中key用userId表示,value是boolean,表示userId是否包含在regUsers中。

return Observable
   .<List<Long>>from(userIdsList)
   .groupBy(id -> id, id -> regUsers.contains(id)); //PROBLEM: regUsers is Observable<List<Long>>

【问题讨论】:

  • 啊,注册用户是可观察的.. 一会儿

标签: java system.reactive rx-java reactive-programming


【解决方案1】:

有点复杂的解决方案。

      List<Long> ids = Arrays.asList(1L, 2L, 3L);
      Observable<List<Long>> regUsers = Observable.just(Arrays.asList(1L, 2L)).cache();

      Observable<Long> idsStream = Observable.from(ids).cache();
      Observable<Boolean> containsStream = idsStream
             .concatMap(id -> regUsers.map(regList -> regList.contains(id)));

      idsStream.zipWith(containsStream, (Func2<Long, Boolean, Pair>) Pair::new)
            .toMap(Pair::getLeft, Pair::getRight).subscribe(System.out::println);


  private static class Pair<K, V> {

    private final K left;
    private final V right;

    public Pair(K left, V right) {
        this.left = left;
        this.right = right;
    }

    public K getLeft() {
        return left;
    }

    public V getRight() {
        return right;
    }
}

【讨论】:

  • 根据代码中关于 observable regUsers 的注释更新答案
猜你喜欢
  • 2019-02-21
  • 2012-05-04
  • 2012-07-27
  • 2022-08-19
  • 2017-09-08
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多