List 通过与另一个列表进行比较来更新对象列表

List 通过与另一个列表进行比较来更新对象列表,list,groovy,List,Groovy,我有两个相同对象的不同列表,一个是样本数据,一个是真实数据。真实数据中的几个字段被弄乱了,我需要通过从样本数据中获取这些值来更新真实数据列表中的几个字段 两个列表都是相同的对象,都具有相同的唯一键 List<pojo> real = [(code:60,active:Y,account:check),(code:61,active:Y,account:check),(code:62,active:Y,account:check)]; List<pojo> sample

我有两个相同对象的不同列表,一个是样本数据,一个是真实数据。真实数据中的几个字段被弄乱了,我需要通过从样本数据中获取这些值来更新真实数据列表中的几个字段

两个列表都是相同的对象,都具有相同的唯一键

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的real-帐户从支票到储蓄

我正在使用Java1.8和groovy


谢谢这是你需要的吗

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]

上面的示例在real中对每个pojo进行迭代,并在示例列表中搜索具有相同代码的对应对象。如果找到了相应的对象,则会覆盖real list对象中account的值,否则将保持原样。

下面是一个脚本,该脚本在与OP请求的示例数据进行比较后更新real data

请注意,输入无效,因此通过将列表中的值更改为map使其有效。i、 e

已从代码60更改,活动:'Y',帐户:'check' 至[代码:60,有效:'Y',账户:'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]]