2017-03-29 11 views
-4

私は同じオブジェクトの2つの異なるリストを持っています.1つはサンプルデータで、もう1つは実データです。実際のデータのいくつかのフィールドが混乱しているので、サンプルデータからこれらの値を取得することで、実際のデータリストのいくつかのフィールドを更新する必要があります。別のリストと比較してオブジェクトリストを更新する

両方のリストは同じオブジェクトであり、どちらも同じユニークキーを持っています。

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しようとしたときに試すことができますあなたは何の問題があったのでしょうか? –

答えて

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を実数で反復し、サンプルリストの対応するオブジェクト(同じコードを持つオブジェクト)を検索します。対応するオブジェクトが見つかった場合は、実際のリストのオブジェクトのaccountの値が上書きされます。そうでない場合、そのままになります。

0

OPで要求されたデータとsampleとを比較して、realのデータを更新するスクリプトです。

入力が無効なので、リスト内の値をマップとして変更することで有効になります。すなわち、(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:'check']への出力から変更

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

は、あなたはすぐにオンラインDemo

関連する問題