代码之家  ›  专栏  ›  技术社区  ›  j2emanue

rxjava-如何从两个可观测对象获取交替发射

  •  0
  • j2emanue  · 技术社区  · 7 年前

      Observable<String> observable = Observable.just("hello","are", "doing");
            Observable<String> observable2 = Observable.just("how","you","today");
    

    你好,今天好吗

    在这里,我尝试使用扫描,但它更像是累加,我得到了以下结果:

    Observable.merge(observable, observable2).reduce(new BiFunction<String, String, String>() {
            @Override
            public String apply(String wordAccum1, String word2) {
                return wordAccum1 + " " + word2;
            }
    
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String sentence) throws Exception {
                Log.v("consumerResult",sentence+"");
            }
        });
    

    日志输出显示: 消费者结果: 你好,你今天怎么样

    我如何连续地从每一个中提取?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Sarath Kn    7 年前

    试试这个

        Observable<String> observable = Observable.just("hello", "are", "doing");
        Observable<String> observable2 = Observable.just("how", "you", "today");
    
    
        observable.zipWith(observable2, new BiFunction<String, String, String>() {
            @Override
            public String apply(String s, String s2) throws Exception {
                return s+" "+s2;
            }
        }).reduce(new BiFunction<String, String, String>() {
            @Override
            public String apply(String s, String s2) throws Exception {
                return s+ " " + s2;
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                System.out.println(s); // this will emit with "hello how are you doing today"
            }
        });
    

    如果您使用的是Java8,那么可以使用lambda减少相同的代码,如下所示

     observable.zipWith(observable2, (s, s2) -> s + " " + s2)
                .reduce((s, s2) -> s +" "+ s2).subscribe(System.out::println);