私のフローにはscattergatherがあり、その出力はマップのリストです。どのようにすればそれをmuleの単一のマップに変換できますか?mule:マップのリストを単一のマップ
私はコンバインコレクション - トランスフォーマ、ペイロードをフラット化しようとしました。何も働いていないようです。
私のフローにはscattergatherがあり、その出力はマップのリストです。どのようにすればそれをmuleの単一のマップに変換できますか?mule:マップのリストを単一のマップ
私はコンバインコレクション - トランスフォーマ、ペイロードをフラット化しようとしました。何も働いていないようです。
カスタムJavaトランスフォーマーを使用することをお勧めします。異なる値を持つ重複キーなどの特殊な状況を簡単に処理できます。 DataWeave関数もトリックを行うことができますが、Mule EEが必要です。
public class MyMapFlattener extends AbstractMessageTransformer{
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
//assuming your payload is the list of map
List<Map<?, ?>> listOfMap = message.getPayload();
Map<Object, Object> finalMap = new HashMap<Object, Object>();
for(Map<?, ?> map : listOfMap){
//you can use putAll if you don't care about duplicates
//finalMap.putAll(map);
// or a more complex algorithm to handle duplicates
for(Entry<?, ?> e : map.entrySet()){
if(finalMap.containsKey(e.getKey())){
//do something to handle situation when key is duplicate...
//you may want to check if both values are equals and skip this
//maybe throw an exception if values are different
//or keep a value
throw new Exception("Duplicate: " + e);
} else {
//key does not exists, put it
finalMap.put(e.getKey(), e.getValue());
}
}
}
return finalMap;
}
}
そして、あなたの流れの中で、この変圧器を使用します。それは、Javaコードの簡単な質問だ変圧器
2つの配列を1つの配列にマージする、フラット演算子です。もう1つは、Dataweave Transformマップ演算子を使用して、必要条件に従ってそれらをマージすることです。
ご回答ありがとうございます。どのようにデータウェイブを使用してマップを含むリストのリストを平らにする? – MRavindran
'flatten'キーワードを使ってリストを平坦化し、' {(flatten payload)} 'のようなマップをマージします。 – AnupamBhusari
これは完璧に機能します! – MRavindran