Ordinamento di array in Groovy
Domanda
Sto cercando di confrontare due array in groovy.I miei tentativi finora hanno prodotto risposte contrastanti e quindi mi rivolgo al collettivo per un consiglio.
Nel codice seguente prendo 2 risposte REST, le analizzo e inserisco tutto sotto il nodo Fattura in un array.Quindi qualifico ulteriormente il mio array in modo da avere un elenco di InvoiceID e quindi provo a confrontare i risultati delle due risposte per assicurarmi che siano uguali.
Quando confronto l'array di InvoiceID (Guid), questi corrispondono: non è quello che mi aspetto poiché l'ordine delle fatture è attualmente diverso tra le mie 2 fonti di risposta.
Quando ordino gli array di ID fatture, i risultati differiscono.
Sospetto che il mio codice sia difettoso, ma ho passato un'ora a frugarlo, senza alcun risultato.
Qualsiasi consiglio sull'ordinamento degli array in groovy o sul codice seguente sarebbe molto apprezzato:
gu = new com.eviware.soapui.support.GroovyUtils( context )
def xmlSlurper = new groovy.util.XmlSlurper()
// Setting up the response parameters
def responseSTAGE = xmlSlurper.parseText(context.expand('${GET Invoices - STAGE#Response}'));
def responseSTAGE2 = xmlSlurper.parseText(context.expand('${GET Invoices - STAGE2#Response}'));
responseInvoicesSTAGE = responseSTAGE.Invoices
responseInvoicesSTAGE2 = responseSTAGE2.Invoices
def arrayOfInvoicesSTAGE = []
def arrayOfInvoicesSTAGE2 = []
def counter = 0
for (invoice in responseInvoicesSTAGE.Invoice) {
arrayOfInvoicesSTAGE[counter] = responseInvoicesSTAGE.Invoice[counter].InvoiceID
//log.info counter+" STAGE"+arrayOfInvoicesSTAGE[counter]
arrayOfInvoicesSTAGE2[counter] = responseInvoicesSTAGE2.Invoice[counter].InvoiceID
//log.info counter+" STAGE2"+arrayOfInvoicesSTAGE2[counter]
counter++
}
log.info arrayOfInvoicesSTAGE
log.info arrayOfInvoicesSTAGE2
def sortedSTAGE = arrayOfInvoicesSTAGE.sort()
def sortedSTAGE2 = arrayOfInvoicesSTAGE2.sort()
log.info sortedSTAGE
Soluzione
Per inciso, non puoi sostituire:
def arrayOfInvoicesSTAGE = []
def arrayOfInvoicesSTAGE2 = []
def counter = 0
for (invoice in responseInvoicesSTAGE.Invoice) {
arrayOfInvoicesSTAGE[counter] = responseInvoicesSTAGE.Invoice[counter].InvoiceID
//log.info counter+" STAGE"+arrayOfInvoicesSTAGE[counter]
arrayOfInvoicesSTAGE2[counter] = responseInvoicesSTAGE2.Invoice[counter].InvoiceID
//log.info counter+" STAGE2"+arrayOfInvoicesSTAGE2[counter]
counter++
}
con
def arrayOfInvoicesSTAGE = responseInvoicesSTAGE.Invoice*.InvoiceID
def arrayOfInvoicesSTAGE2 = responseInvoicesSTAGE2.Invoice*.InvoiceID
Altri suggerimenti
Due array sono considerati uguali in Groovy se hanno lo stesso numero di elementi e ogni elemento nella stessa posizione è uguale.Puoi verificarlo eseguendo il codice seguente nella console Groovy
Integer[] foo = [1,2,3,4]
Integer[] bar = [4,3,2,1]
assert foo != bar
bar.sort()
assert foo == bar