繁体   English   中英

如何在For子中使用Foreach迭代地图?

[英]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="???????????&lt;=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 &lt; 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM