[英]How to iterate a map using Foreach in mule?
我给“ MAP”作为foreach的输入:
{Id=1, Sum=10, Name=Jon1, Level=1},
{Id=2, Sum=20, Name=Jon2, Level=1},
{Id=3, Sum=30, Name=Jon3, Level=1}...................,
基于“ Sum”值,我需要将每个记录发送到两个不同的文件中。 我触动的地方是我不知道如何在foreach,when和logger语句中写问号的地方编写这些条件语句。
<foreach doc:name="For Each" collection="?????????????????">
<choice doc:name="Choice">
<when expression="???????????<=30">
</when>
<otherwise>
<data-mapper:transform doc:name="DataMapper"/>
<logger message="default logger "?????????" level="INFO"doc:name="Logger"/>
</otherwise>
</choice>
</foreach>
请对此提出建议,如果您知道如果输入“ CSV”则如何编写条件语句,请发表评论。我是m子的新手。,谢谢。
Mule使用基于MVEL的MEL作为表达语言。 它允许您使用点语法来导航Maps和POJO等或标准Java方法调用:
#[message.payload.get('Sum')]
#[message.payload.Sum]
如果您不提供collection
表达,则foreach将自动默认为消息有效负载。 如果您的有效载荷是一个Collection,那么应该没问题。 看起来您的有效负载是地图的集合,因此您应该可以使用:
<foreach doc:name="For Each" collection="#[message.payload]">
<choice doc:name="Choice">
<when expression="#[message.payload.Sum < 30]">
</when>
<otherwise>
<logger message="#[message.payload.Sum]" level="INFO"doc:name="Logger"/>
</otherwise>
</choice>
</foreach>
如果要迭代单个映射中的不同条目,可以使用以下命令:
<foreach collection="#[message.payload.entrySet()]">
...
</foreach>
我将链接我以前的答案 ,本质是不要尝试将过程逻辑编码到流程中,而应将组件用于此类工作。
但是,如果您尝试学习,那么@Ryan答案就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.