是否可以在foreach内循环中修改原始集合?

时间:2015-08-10 09:05:39

标签: mule

我想模仿这个:

self.content.contentId

是否可以使用for (int i = 0; i < items.getTotal(); i++) { // .... items = // new items get assigned. } 组件?

2 个答案:

答案 0 :(得分:1)

我认为您最好使用收集拆分器和收集聚合器来修改原始有效负载。

<collection-splitter />

<set-payload value="do something" />

<collection-aggregator /> 

或者,如果必须使用foreach,则可以使用flowVar来跟踪项目,并在foreach之后将有效负载设置为flowVar:

<set-variable variableName="items" value="#[[]]" />

<foreach>
  <set-payload value="do something" />
  <expression-component>flowVars.items.add(payload)</expression-component>
</foreach>

<set-payload value="#[flowVars.items]" />

答案 1 :(得分:0)

解决方法:
在foreach之外:

  • 将会话变量X设置为通过哪个链接列表的内容 你想循环。

  • 我的所有MS JDBC 4.1存储过程调用都返回带有key = resultSetx的1-n个散列图和链接列表的值。链表中的每一个匹配都是另一个包含1行结果集对(key = value)的哈希映射 - 所以我们遇到了很多。

在foreach顶级:

  • 将有效内容集合引用设置为包含的有效内容 链表。
    提醒:(默认计数器flowVar启动 在1.链接列表偏移从0开始。)

在foreach内:

  • 设置另一个变量(ctr-1)等于counter - 1;如果你没有 可以用那些反-1来制造一些丑陋和困难的MEL 引用)。
  • 将您的列表插入会话变量X linkedlist。

foreach完成后:
  - 不要忘记删除浪费空间的冗余列表。

干杯-MPC: - )