react解体後に配列を加える_プロジェクトReactスタック–メタグループの解体


react解体後に配列を加える
メタグループは、固定されたアイテムのセットを含む簡単なデータ構造で、各アイテムには異なるデータ型があります.
Project Reactorは、約8種類の異なるタイプのメタグループを格納できるデータ構造を提供します.
メタグループは非常に有用ですが、メタグループを使用する問題の1つは、それらの各位置を使用して構造分解を行わない場合、その内容を明らかにすることが難しいことです.
に質問
文字列と整数を圧縮する単純な演算子を考慮します.
 Mono> tup = Mono.zip(Mono.just( "a" ), Mono.just( 2 )) 

出力は2つの要素を含むメタグループです.
今、私の問題はこれです.任意の操作を行う前に、メタグループを構成要素に参照解除するのが好きです.
前のメタグループで言えばcount(メタグループの2番目の要素)と同じくらい多くの文字列(メタグループの1番目の要素)を生成したいのですが、表現は次のようになります.
 Mono.zip(Mono.just( "a" ), Mono.just( 2 )) 
     .flatMapMany(tup -> { 
         return Flux.range( 1 , tup.getT2()).map(i -> tup.getT1() + i); 
     }) 

ここでの質問は、「tup.gett 1()」と「tup.gett 2()」を引用した場合、メタグループの意味はまだ分かりません.もっと冗長ですが、私はこのようにするのが好きです.
 Mono.zip(Mono.just( "a" ), Mono.just( 2 )) 
     .flatMapMany(tup -> { 
         String s = tup.getT1(); 
         int count = tup.getT2(); 
         return Flux.range( 1 , count).map(i -> s + i); 
     }); 


構造を有意義な名前の明示的な変数に分解する方法は有効ですが、これは少し冗長です.Project Reactorに付属のユーティリティ機能のセットを使用すると、より良いメソッドメタグループが提供されます.
TupleUtilsを使用する前の解体は、次のように見える例で説明したほうがいいと思います.
 Mono.zip(Mono.just( "a" ), Mono.just( 2 )) 
     .flatMapMany(TupleUtils.function((s, count) -> 
             Flux.range( 1 , count).map(i -> s + i))) 

これは明示的な解構よりも簡潔に見える.少し頭がいいですが、いくつかの習慣が必要です.
flatMapManyの署名は-
 public final  Flux flatMapMany(Function super T,? extends Publisher extends R>> mapper) 

TupleUtilsは、上記の必要な関数を別の関数で返す別の間接関数を提供します.
 public static  Function, R> function(BiFunction function) { 
     return tuple -> function.apply(tuple.getT1(), tuple.getT2());  } 

Kotlinを使用している場合は、より簡単な方法があります.これは、「破棄宣言」の概念に基づいています.Project Reactorは、追加のgradle依存項目を使用して、Kotlinヘルプユーティリティのセットを提供します.
 implementation( "io.projectreactor.kotlin:reactor-kotlin-extensions" ) 

このような依存関係があると,等価なKotlinコードは以下のようになる.
 Mono.zip(Mono.just( "a" ), Mono.just( 2 )) 
     .flatMapMany { (s: String, count: Int) -> 
         Flux.range( 1 , count).map { i: Int -> s + i } Flux.range( , count).map { i: Int -> s + i } 
     } 

メタグループを直接変数に分解する方法について説明します.次のように見えます.
 val (s: String, count: Int) = tup 

結論
メタグループをより意味のある変数に分解してコードの可読性を高めることが重要であり、TupleUtilsおよびKotlin拡張が提供する有用な機能は、コードの簡潔性と可読性を維持するのに役立つ.
Javaの例はここで、Kotlinの例はここで
翻訳:https://www.javacodegeeks.com/2020/01/project-reactor-de-structuring-a-tuple.html
react解体後に配列を加える