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.
Vielen Dank für Ihre Antwort. Wie man Liste der Listen, die Karte unter Verwendung des Datengewebes enthält, flacht? – MRavindran
Verwenden Sie 'flatten' Schlüsselwort, um zuerst die Liste zu reduzieren und dann die Karte wie' {(flattern Sie die Payload)} zusammenzuführen}} – AnupamBhusari
Das funktioniert perfekt! – MRavindran