Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerflatMap
関数は、入力に対して map
をコールし、その結果をラップして flatten
をコールします。
開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、DataWeave バージョン 1.2 の例を参照してください。
他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。
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
}
]