【问题标题】:Efficiently replacing values in a list based on value from another list in mule Dataweave根据 mule Dataweave 中另一个列表中的值有效替换列表中的值
【发布时间】:2019-04-04 09:18:24
【问题描述】:

需要一种有效的解决方案,用数组 2 中的值替换数组 1(主列表)中的值。当前代码在 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


})

上面的代码给出了预期的结果。但是当列表值比较多的时候就很慢了。

【问题讨论】:

    标签: arrays arraylist mule dataweave


    【解决方案1】:

    您好,您应该使用 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
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 2020-03-20
      相关资源
      最近更新 更多