根据条件将一个地图的值设置为其他地图

时间:2013-12-17 14:36:03

标签: groovy

我有几个记录rec1和rec2。

两者都有一个共同的键/值name1。

当两个记录中的name1相等时,我需要将rec2的几个值设置为rec1。

我把它们分成两个不同的循环,如下所示

rec1.each{r1-> each
    rec2.each{r2-> each
        if(r2.name1 == r1.name1){
        r1.name2 = r2.name2
        r1.name3 = r2.name3
        }
    }
}

有没有更好的方法呢

示例:(对不起,我只是粘贴内容)

  

recoRecord:[[“CHANNEL”:INBOUND,“STOCK_LEVEL”:2410.0,   “OFFER_TARIFF_ID”:FBUN-MVP-VME-VIRGIN-31-24-04,“P_BAND”:P4-6,   “CONTRACT_LENGTH”:24.0,“INCENTIVE_POINTS”:10.0,   “HANDSET_PKEY_ID”:SAM-STD-I9300-1,“CUST_TYPE”:媒体]]

     

记录:[[“MEDIA_SUBSIDY_VALUE”:0.0,“CREDIT_CLASS”:C5,   “DOM_OTHER_MARGIN”:0.0,“isBatchTerminator”:false,   “CALL_GROUP_DESC”:COMBINED,“DM”:20.0,“BLACKBERRY_IND”:N,   “PREFERRED_BLACKBERRY”:N,“ERROR_ID”:0,“CUST_TYPE”:媒体,   “TARIFF_MRC”:30.99,“MOST_USED_TAC”:35961404,“FORM_FACTOR”:null,   “CAMERA_IND”:null,“NEW_MARGIN”:22.272501,“MODEL”:null,   “IS_MMS_ALLOWANCE”:N,“ACTIVE_HANDSET_BANDS”:,   “CUST_OUT_OF_ALLOWANCE_PLAN”:JV15,“OOB_DOM_VOICE”:0.0,   “OOB_DOM_SMS”:0.0,“VM_CUST_FLAG”:Y,“IB_DATA”:0.0,   “CHANNEL_FLAG”:INBOUND,“SMS_ALLOWANCE”:5000.0,“ROAM_SMS_MARGIN”:0.0,   “TARIFF_DESC”:30.99 Virgin Media 24个月+ 1GB 1300分钟,   “MARGIN_CHANGE_PCT”:0.12691319,“OFFER_VOICE_ALLOWANCE”:600,   “MAKE”:null,“IS_ONNET_ALLOWANCE”:Y,“OFFER_CONTRACT_TERM”:24.0,   “PREFERRED_MINUTES”:1300,“PREFERRED_ON_NET”:Y,   “MOST_USED_IMEI”:359614048625860,“折扣”:3.0,   “NetPresentValue”:1.15,“RecInd”:1,“WIFI_IND”:null,“IPHONE_IND”:N,   “OFFER_TARIFF_ID”:FBUN-MVP-VME处女-31-24-04,   “IncentivePoints”: - 1.0]

当两个记录中的OFFER_TARIFF_ID相同时,我想将第一个记录的几个值设置为第二个记录

1 个答案:

答案 0 :(得分:0)

您无需迭代这两个地图。只需要检查特定键匹配的值是否匹配。

if(r2.'OFFER_TARIFF_ID' == r1.'OFFER_TARIFF_ID'){
  //push the required entries from r1 to r2
}

虽然在编辑中,我没有看到记录的有效数据结构,但我将r1和r2视为地图。