首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mule中使用Foreach迭代地图?

问如何在mule中使用Foreach迭代地图?
EN

Stack Overflow用户
提问于 2015-09-07 19:16:35
回答 2查看 2.4K关注 0票数 1

我将"MAP“作为输入提供给foreach:

代码语言:javascript
复制
{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语句中编写这些条件语句,我在这些语句中保留了问号。

代码语言:javascript
复制
 <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“,我是新手,谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-09-07 19:40:17

Mule使用基于MVEL的MEL作为表达式语言。它允许您使用点语法来导航Map和POJO等,或者使用标准的Java方法调用:

代码语言:javascript
复制
#[message.payload.get('Sum')]

#[message.payload.Sum]

如果您不提供collection expresssion,则foreach将自动默认为消息有效负载。如果您的有效负载是一个集合,那么它应该是好的。看起来您的有效负载是一个地图集合,因此您应该能够使用:

代码语言:javascript
复制
<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>

如果要在单个映射中迭代不同的条目,可以使用以下方法:

代码语言:javascript
复制
<foreach collection="#[message.payload.entrySet()]">
  ...
</foreach>
票数 1
EN

Stack Overflow用户

发布于 2015-09-08 05:58:31

我会链接我之前的一个answer,其本质是不要试图将过程逻辑编码到流中,使用组件来实现这类东西。

但是,如果你正在尝试学习,那么@Ryan的答案是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32437365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档