[RxJava]連結演算子

3467 ワード

連結演算子

  • は、複数の観測可能データを統合する方法
  • を提供する.
  • flatMap()やGroupBy()関数などが1つの観測可能なものを拡張し、結合演算子は複数の観測可能なものを私の望む観測可能なものに結合します.

  • zip()

  • のそれぞれの観測可能性を利用して、2つ以上の観測可能性を結合する.
  • ex)A、Bの2つの観測可能性が結合されている場合、統合を行うには、両方の観測可能性でデータを発行する必要があります.
    その前に発行を待つ.
  • 上図に示すように、2つの観測可能なペアがペアになるまで発行が遅延し、ペアごとに2つのデータを結合して1つの観測可能なペアに放出する.
  • は最大9個の観測可能なものを結合することができる.
  • Observable<Integer> source = Observable.zip(
    	Observable.just(100,200,300),
        Observable.just(10,20,30),
        Observable.just(1,2,3),
        (a,b,c) -> a+b+c);
        
    source.subscribe(Log::i);

    combineLatest()

  • 2以上の観測値に基づいて、各観測値が変更されたときに更新される関数.
  • ex)この値は、第1の可視性と第2の可視性とを組み合わせた機能が作成されると、第1の可視性の値または第2の可視性の値が変化すると自動的に更新される.

  • 最初の表示可能な場所でのみデータがパブリッシュされる場合、または2番目の表示可能なデータストリームのみがパブリッシュされる場合、サブスクライバにデータは送信されません.
    ただし、両方の観測値が発行されると、結果値が表示され、最新の結果値のみが表示されます.
    これがzip()との違いです.
    String[] data = {PUPPLE, ORANGE, SKY, YELLOW};
    String[] data2 = {DIAMOND, STAR, PENTAGON};
    
    Observable<String> source = Observable.combineLatest(
    Observable.fromArray(data)
    	.zipWith( //zipWith()로 깔끔하게 코드 정리
    		Observable.interval(100L, TimeUnit.MILLISECONDS), 
            		(shape, notUsed) -> Shape.getColor(shape)),	  
    
    Observable.fromArray(data2)
    	.zipWith(
    		Observable.interval(150L, 200L, TimeUnit.MILLISECONDS),	  
    			(shape, notUsed) -> Shape.getSuffix(shape)),
    				(v1, v2) -> v1 + v2);
    		
    source.subscribe(Log::i);
    CommonUtils.sleep(1000);
    CommonUtils.exampleComplete();
    2つの観測可能なデータの数が異なる.
    1つ目は観測可能な4色,2つ目は3種類の形状を得た.
    第1の観測値間隔は100 ms,第2の観測値間隔は150 ms,間隔は200 msであった.
    zip()とは異なり、2つの値が1つずつ発行された後、いずれかの値を変更すると結果が発行されます.

    merge()

  • zip()関数または組合せLatest()関数と比較して、最も簡単な連結関数です.
  • は、観測可能な順序およびすべての観測可能な発行データを入力し、いずれにしても上流入力データに従って発行する.

    非常に直感的に漫威図に現れた.
  • merge()は、単純に2つ以上の観測可能データが到着したときに、1つの観測可能データを介してデータを放出することができる.
  • そしてこれがconcat()との違いです.(concat()は観察者の順序を保証する.
  • concat()とmerge()の文章を比較する
  • concat()

  • は、2つ以上の観測可能な関数
  • を接続する.
  • 最初の可視性は、onCompleteイベントが発生しなければ、2番目の可視性を購読できません.
  • 最初の観測可能なonCompleteイベントが発生しない場合、2番目の観測可能なものは永遠に待機するため、潜在的なメモリリークリスクがある.
  • concat()を使用して、データをネットワーク/ローカルに格納し、データを簡単に迅速にロードできます.RxJavaを使用して複数のソースからデータをロード
  • Reference

  • RxJava連結演算子の整理