2017-03-29 3 views
-4

Ich habe zwei verschiedene Listen des gleichen Objekts, eines ist mit Beispieldaten, eines ist mit echten Daten. Wenige Felder in den realen Daten sind durcheinander, ich muss die wenigen Felder der realen Datenliste aktualisieren, indem ich diese Werte aus Beispieldaten abrufe.Aktualisiere eine Liste von Objekten durch Vergleichen mit einer anderen Liste

Beide Listen sind vom selben Objekt, beide haben denselben eindeutigen Schlüssel.

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)] 

Ich habe rund 60 Objekte in jeder Liste, in der über einen brauche ich wirklich zu aktualisieren, wenn der Code 60 und 62 - Konto von Scheck zu speichern.

ich Java 1.8 & groovy

dank

+1

Und wenn sie versuchen zu DURCHFÜHRU Welche Funktionalit? t sind Sie konkret begegnet? –

Antwort

1

bin mit Ist das, was Sie brauchen?

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] 

Die obige Probe iteriert mit jeweils über jeden pojo in Real- und durchsucht das entsprechende Objekt (die mit dem gleichen Code) in der Probenliste. Wenn das entsprechende Objekt gefunden wird, wird der Wert von account im Objekt der reellen Liste überschrieben, ansonsten bleibt er unverändert.

0

Hier ist das Skript, das real Daten nach dem Vergleich mit sample Daten aktualisiert, wie von OP angefordert.

Beachten Sie, dass die Eingabe nicht gültig ist, so dass sie gültig ist, indem Sie die Werte in der Liste als Karte ändern. das heißt

geändert von (code:60,active:'Y',account:'check')
zu [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 

Ausgang:

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

Sie schnell Online ausprobieren können Demo

Verwandte Themen