Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 基于mule Dataweave中另一个列表的值高效地替换列表中的值_Arrays_Arraylist_Mule_Dataweave - Fatal编程技术网

Arrays 基于mule Dataweave中另一个列表的值高效地替换列表中的值

Arrays 基于mule Dataweave中另一个列表的值高效地替换列表中的值,arrays,arraylist,mule,dataweave,Arrays,Arraylist,Mule,Dataweave,需要一个有效的解决方案,将数组1(主列表)中的值替换为数组2中的值。当前代码在Dataweave中工作。但我不认为当两个列表包含更多值时,这是一个最佳解决方案。建议使用数组2中的值更新数组1的最佳解决方案。我正在使用Mule 3.8.5。我想要一个解决方案,这样我只需要在第二个列表中迭代一次,并替换主列表中的所有值。目前,在样本中使用了两次过滤条件。但在实际场景中,我需要替换8个这样的值 %dw 1.0 %output application/java %var arr1 =[ {

需要一个有效的解决方案,将数组1(主列表)中的值替换为数组2中的值。当前代码在Dataweave中工作。但我不认为当两个列表包含更多值时,这是一个最佳解决方案。建议使用数组2中的值更新数组1的最佳解决方案。我正在使用Mule 3.8.5。我想要一个解决方案,这样我只需要在第二个列表中迭代一次,并替换主列表中的所有值。目前,在样本中使用了两次过滤条件。但在实际场景中,我需要替换8个这样的值

%dw 1.0
%output application/java
%var arr1 =[
    {
       "leadId": 127,
       "playerId": 334353,
       "name": "Joseph",
       "activity": "10/03/2015"
     },
     {
       "leadId": 128,
       "playerId": 334354,
       "name": "Sam",
       "activity": "10/03/2017"
     },
     {

      "leadId": 124,
       "playerId": "",
       "name": "",
        "activity": "10/03/2015"
     },
    {

      "leadId": 123,
       "playerId": "",
       "name": "",
        "activity": "10/03/2015"
     }

  ]
 %var arr2 =  [
   {
     "playerId": 123456,
     "name": "James",
     "leadId": 124
   },
   {
     "playerId": 7890,
     "name": "Jacob",
     "leadId": 123
   }
 ]

---
arr1 map ((actData) -> {
     "leadId":actData.leadId,
     "playerId": (arr2 filter ($.leadId == actData.leadId))[0].playerId default actData.playerId,
    "name": (arr2 filter ($.leadId == actData.leadId))[0].name default actData.name,
    "activity": actData.activity


})


上面的代码给出了预期的结果。但是,当列表值更多时,速度会非常慢。

您好,您应该使用groupBy,这样它会根据条件进行索引,然后每次都执行查找而不是筛选

%dw 1.0
%output application/json
%var arr1 =[
    {
       "leadId": 127,
       "playerId": 334353,
       "name": "Joseph",
       "activity": "10/03/2015"
     },
     {
       "leadId": 128,
       "playerId": 334354,
       "name": "Sam",
       "activity": "10/03/2017"
     },
     {

      "leadId": 124,
       "playerId": "",
       "name": "",
        "activity": "10/03/2015"
     },
    {

      "leadId": 123,
       "playerId": "",
       "name": "",
        "activity": "10/03/2015"
     }

  ]
 %var arr2 =  [
   {
     "playerId": 123456,
     "name": "James",
     "leadId": 124
   },
   {
     "playerId": 7890,
     "name": "Jacob",
     "leadId": 123
   }
 ]


%var arr2ByLeadId = arr2 groupBy $.leadId
---
arr1 map ((actData) -> {
    "leadId":actData.leadId,
    "playerId": arr2ByLeadId."$(actData.leadId)"[0].playerId default actData.playerId, 
    "name": arr2ByLeadId."$(actData.leadId)"[0].name default actData.name,
    "activity": actData.activity
})