MULE 4:REDUCE 方法:如果累加器是对象,Reduce 方法中的元素大小是否有限制?
MULE 4 : REDUCE method : Is there a limit to elements size in Reduce method if the accumulator is an Object?
场景:使用 Mule 4 中的 Reduce 方法将 LIST 缩减为三个参数:
- 学生名单
- 教师名单
- 学生人数
在转换消息中使用以下 Dataweave 代码:
%dw 2.0
output application/java
---
payload reduce((value, acc = { 'totalStudents': 0 as Number,'studentList' : [], 'teachersList' : []}) ->
if(
value.age > 18 and value.age < 25
){
totalStudents : (acc.totalStudents default 0 as Number) + 1,
studentList : (acc.studentList default [] ) << {
'studentName' : value.Name ++ " is a Student"
}
}else{
teachersList : acc.teachersList default [] << value.Name ++ " is a Teacher"
}
)
问题陈述:转换消息已成功处理,但在有效载荷中我只得到两个值:
- payload.totalStudents 和
- payload.studentList
谁能帮我理解为什么我的结果没有得到 payload.teachersList?
希望这对您有所帮助。由于存在 else 条件,它构建教师列表并忽略学生列表
这也是。在下面的输入中,第二个元素满足 else 条件,因此最终输出仅包含输入中最后 4 个条目的学生。
最后这应该得到你要找的东西:
%dw 2.0
output application/java
---
payload reduce((value, acc = { 'totalStudents': 0 as Number,'studentList' : [], 'teachersList' : []}) ->
if(
value.age > 18 and value.age < 25
){
totalStudents : (acc.totalStudents default 0 as Number) + 1,
studentList : (acc.studentList default [] ) << {
'studentName' : value.Name ++ " is a Student"
},
teachersList: acc.teachersList
}else{
totalStudents : acc.totalStudents,
studentList : acc.studentList,
teachersList : (acc.teachersList default [] ) << {'teacherName': value.Name ++ " is a Teacher"}
}
)```
[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/fcyNf.png
%dw 2.0
output application/java
---
payload reduce((value, acc = { 'totalStudents': 0 as Number,'studentList' : [], 'teachersList' : []}) ->
if(
value.age > 18 and value.age < 25
){
totalStudents : (acc.totalStudents default 0 as Number) + 1,
studentList : (acc.studentList default [] ) << {
'studentName' : value.Name ++ " is a Student"
},
teachersList: acc.teachersList
}else{
totalStudents : acc.totalStudents,
studentList : acc.studentList,
teachersList : (acc.teachersList default [] ) << {'teacherName': value.Name ++ " is a Teacher"}
}
)
场景:使用 Mule 4 中的 Reduce 方法将 LIST 缩减为三个参数:
- 学生名单
- 教师名单
- 学生人数
在转换消息中使用以下 Dataweave 代码:
%dw 2.0
output application/java
---
payload reduce((value, acc = { 'totalStudents': 0 as Number,'studentList' : [], 'teachersList' : []}) ->
if(
value.age > 18 and value.age < 25
){
totalStudents : (acc.totalStudents default 0 as Number) + 1,
studentList : (acc.studentList default [] ) << {
'studentName' : value.Name ++ " is a Student"
}
}else{
teachersList : acc.teachersList default [] << value.Name ++ " is a Teacher"
}
)
问题陈述:转换消息已成功处理,但在有效载荷中我只得到两个值:
- payload.totalStudents 和
- payload.studentList
谁能帮我理解为什么我的结果没有得到 payload.teachersList?
希望这对您有所帮助。由于存在 else 条件,它构建教师列表并忽略学生列表
这也是。在下面的输入中,第二个元素满足 else 条件,因此最终输出仅包含输入中最后 4 个条目的学生。
最后这应该得到你要找的东西:
%dw 2.0
output application/java
---
payload reduce((value, acc = { 'totalStudents': 0 as Number,'studentList' : [], 'teachersList' : []}) ->
if(
value.age > 18 and value.age < 25
){
totalStudents : (acc.totalStudents default 0 as Number) + 1,
studentList : (acc.studentList default [] ) << {
'studentName' : value.Name ++ " is a Student"
},
teachersList: acc.teachersList
}else{
totalStudents : acc.totalStudents,
studentList : acc.studentList,
teachersList : (acc.teachersList default [] ) << {'teacherName': value.Name ++ " is a Teacher"}
}
)```
[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/fcyNf.png
%dw 2.0
output application/java
---
payload reduce((value, acc = { 'totalStudents': 0 as Number,'studentList' : [], 'teachersList' : []}) ->
if(
value.age > 18 and value.age < 25
){
totalStudents : (acc.totalStudents default 0 as Number) + 1,
studentList : (acc.studentList default [] ) << {
'studentName' : value.Name ++ " is a Student"
},
teachersList: acc.teachersList
}else{
totalStudents : acc.totalStudents,
studentList : acc.studentList,
teachersList : (acc.teachersList default [] ) << {'teacherName': value.Name ++ " is a Teacher"}
}
)