2017-12-02 2 views
0

Ich habe scattergather in meinem Fluss, dessen Ausgabe ist eine Liste von Karten, Wie kann ich das in eine einzige Map in Mule konvertieren?mule: Merge Liste der Karten in einzelne Karte

Ich habe versucht, kombinieren-Collections-Transfomer, Nutzlast zu reduzieren. Nichts scheint zu funktionieren.

Antwort

1

Sie können folgende Sie dataweave Code, aber es wird Nachschlüssel

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

Dataweave Snapshot

hoffe, das hilft außer Kraft setzen.

+0

Vielen Dank für Ihre Antwort. Wie man Liste der Listen, die Karte unter Verwendung des Datengewebes enthält, flacht? – MRavindran

+0

Verwenden Sie 'flatten' Schlüsselwort, um zuerst die Liste zu reduzieren und dann die Karte wie' {(flattern Sie die Payload)} zusammenzuführen}} – AnupamBhusari

+0

Das funktioniert perfekt! – MRavindran

0

Ich würde empfehlen, einen benutzerdefinierten Java Transformer zu verwenden, damit Sie spezielle Situationen wie doppelte Schlüssel mit unterschiedlichen Werten problemlos behandeln können. Eine DataWeave-Funktion ist möglicherweise auch in der Lage, dies zu tun, aber Sie benötigen Mule EE.

mit einem Transformator ist es eine einfache Frage von Java-Code:

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; 

    } 
} 

Und dann diesen Transformator in Ihrem Flow verwenden. See the docs for details.

0

Sie haben mehrere Möglichkeiten, dies zu tun, von denen einer ist flatten Operator, der 2 Arrays zu einem einzigen Array zusammenführt. Die andere Möglichkeit besteht darin, dies über den Dataweave Transform-Kartenoperator zu tun und diese gemäß Ihren Anforderungen zusammenzuführen.

Verwandte Themen