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