我正在尝试复制此指令的结果:
def xmlEntrada = new File("input.txt").text
def entrada = new XmlParser().parseText(xmlEntrada)
def usuarios = entrada.cust_PS_SF_compensation.findAll{ e-> e.cust_userId.toString() == codigoActual }
def usuariosWithEndDate = entrada.cust_PS_SF_compensation.findAll{ e-> e.cust_userId.toString() == codigoActual }
但是变量usuariosWithEndDate的所有节点都具有相同的引用,我需要按此操作结果的值进行复制以进行并行编辑。
usuariosWithEndDate是一个arrayList,其对用法的引用不同,但是内容(节点)具有相同的引用,请帮助
答案 0 :(得分:1)
据我所知,我们想要clone()
在这里。
给出此XML:
<entrada>
<cust_PS_SF_compensation>
<cust_userId>5150</cust_userId>
</cust_PS_SF_compensation>
<cust_PS_SF_compensation>
<cust_userId>6160</cust_userId>
</cust_PS_SF_compensation>
<cust_PS_SF_compensation>
<cust_userId>7170</cust_userId>
</cust_PS_SF_compensation>
</entrada>
以下是带有assert
语句作为规范形式的Groovy代码(如果我理解这个问题):
def xmlEntrada = new File("input.xml").text
def entrada = new XmlParser().parseText(xmlEntrada)
def codigoActual = "5150"
def usuarios = entrada.cust_PS_SF_compensation.findAll{ e ->
e.cust_userId.text() == codigoActual
}
assert 1 == usuarios.size()
def usuariosWithEndDate = entrada.cust_PS_SF_compensation.findAll{ e ->
e.cust_userId.text() == codigoActual
}.collect { node ->
node.clone()
}
assert 1 == usuariosWithEndDate.size()
assert ! usuarios[0].is(usuariosWithEndDate[0])
assert codigoActual == usuarios[0].cust_userId.text()
assert codigoActual == usuariosWithEndDate[0].cust_userId.text()