2017-12-02 1 views
0

私のフローにはscattergatherがあり、その出力はマップのリストです。どのようにすればそれをmuleの単一のマップに変換できますか?mule:マップのリストを単一のマップ

私はコンバインコレクション - トランスフォーマ、ペイロードをフラット化しようとしました。何も働いていないようです。

答えて

1

あなたはdataweaveコードを、以下のことができますが、それは重複したキー

%dw 1.0 
%output application/java 
--- 
{(payload)} 

Dataweave Snapshot

・ホープこのことができますを上書きします。

+0

ご回答ありがとうございます。どのようにデータウェイブを使用してマップを含むリストのリストを平らにする? – MRavindran

+0

'flatten'キーワードを使ってリストを平坦化し、' {(flatten payload)} 'のようなマップをマージします。 – AnupamBhusari

+0

これは完璧に機能します! – MRavindran

0

カスタム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コードの簡単な質問だ変圧器

See the docs for details.

0

2つの配列を1つの配列にマージする、フラット演算子です。もう1つは、Dataweave Transformマップ演算子を使用して、必要条件に従ってそれらをマージすることです。

関連する問題