2017-03-29 60 views
-4

我確實有兩個不同的同一對象列表,一個是樣本數據,一個是實際數據。實際數據中的幾個字段會混淆,我需要通過從樣本數據中獲取這些值來更新實際數據列表的幾個字段。通過與另一個列表比較來更新對象列表

兩個列表都具有相同的對象,都具有相同的唯一鍵。

List<pojo> real = [(code:60,active:Y,account:check),(code:61,active:Y,account:check),(code:62,active:Y,account:check)]; 

List<pojo> sample = [(code:60,active:Y,account:saving),(code:61,active:Y,account:check),(code:62,active:Y,account:saving)] 

我在每個列表60左右的物體,在上面的一個,我需要真正的更新,其中的代碼是60和62 - 帳戶從檢查節約。

我用java 1.8 &常規

感謝

+1

並試圖impleme時nt那功能性你特別遇到了什麼問題? –

回答

1

這是你需要什麼?

class Pojo { 
    def code 
    def active 
    def account 

    String toString() { 
     account 
    } 
} 

List<Pojo> real = [new Pojo(code: 60, active: 'Y', account: 'check'), new Pojo(code: 61, active: 'Y', account: 'check'), new Pojo(code: 62, active: 'Y', account: 'check')] 

List<Pojo> sample = [new Pojo(code: 60, active: 'Y', account: 'saving'), new Pojo(code: 61, active: 'Y', account: 'check'), new Pojo(code: 62, active: 'Y', account: 'saving')] 

real.each { r -> 
    def acc = sample.find{it.code == r.code}?.account 

    if (acc != null) { 
     r.account = acc 
    } 
} 

println real // prints [saving, check, saving] 

與每個上述樣品迭代在真實每個POJO並且搜索在樣品列表中的相應對象(即具有相同的碼)。如果找到相應的對象,則實際列表的對象中的帳戶值將被覆蓋,否則它將保持原樣。

0

以下是根據OP要求與sample數據比較後更新real數據的腳本。

請注意,輸入無效,因此通過將列表內的值更改爲映射使其有效。即,

(code:60,active:'Y',account:'check')
改爲[code:60,active:'Y',account:'check']

def realData = [[code:60,active:'Y',account:'check'],[code:61,active:'Y',account:'check'],[code:62,active:'Y',account:'check']] 
def sampleData = [[code:60,active:'Y',account:'saving'],[code:61,active:'Y',account:'check'],[code:62,active:'Y',account:'saving']] 
realData.collect{rd -> sampleData.find{ it.code == rd.code && (it.account == rd.account ?: (rd.account = it.account))}} 
println realData 

輸出:

[[code:60, active:Y, account:saving], [code:61, active:Y, account:check], [code:62, active:Y, account:saving]] 

您可以快速地在線試用Demo

相關問題