Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerflatMap 関数は、入力に対して map をコールし、その結果をラップして flatten をコールします。
開始する前に、DataWeave バージョン 2 (%dw 2.0) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave バージョン 1 (%dw 1.0) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。
flatMap 関数は、map へのコールの結果に対して flatten の使用をリファクタリングする場合に役立ちます。たとえば、次の DataWeave スクリプトについて考えてみます。
%dw 2.0
output application/json
var myData = [{name:1},{name:2},{name:3}]
fun myExternalFunction(data): Array =
    if(data.name == 1)
        []
    else if(data.name == 2)
        [{name: 3}, {name:5}]
    else
        [data]
---
//flatten(myData map ((item, index) -> myExternalFunction(item)))
myData flatMap ((item, index) -> myExternalFunction(item))
スクリプトのヘッダーでは、変数 myData を作成してオブジェクトの配列を定義しています。各オブジェクトにはキー name が含まれています。またここでは、キー name を含む名前-値ペアに対して実行する一連の if-else ステートメントを含む関数も定義しています。
DataWeave スクリプトの本文には、次の式が含まれています。いずれも結果は同じです。
flatten(myData map ((item, index) → myExternalFunction(item)))
myData flatMap ((item, index) → myExternalFunction(item))
flatMap 式を使用する場合でも、明示的に flatten を使用して map 式をラップする場合でも、次のことが実行されます。
ヘッダーで定義された関数 myExternalFunction() の if-else 条件に従って入力配列の項目がマップされます。
このマッピングの出力は次のようになります。
[
  [
  ],
  [
    { "name": 3 },
    { "name": 5 }
  ],
  [
    { "name": 3 }
  ]
]
サブ配列の要素を 1 つの配列にまとめ、親配列を削除し、空の子配列を除外することによって、マップされた結果がフラット化されます。
このフラット化の出力は次のようになります。
[
  {
    "name": 3
  },
  {
    "name": 5
  },
  {
    "name": 3
  }
]