Сортировка массивов в Groovy

Я пытаюсь сравнить два массива в Groovy. Мои попытки пока дали неоднозначную реакцию, поэтому я обращаюсь к коллективу за советом.

В следующем коде я беру 2 ответа REST, разбираю их и помещаю все в узел Invoice в массив. Затем я дополнительно уточняю свой массив, чтобы получить список InvoiceID, а затем пытаюсь сравнить результаты двух ответов, чтобы убедиться, что они одинаковы.

Когда я сравниваю массив идентификаторов InvoiceID (Guids), которые они совпадают - это не то, что я ожидаю, поскольку порядок выставления счетов в настоящее время различается в двух моих источниках ответа.

Когда я сортирую массивы идентификаторов счетов, результаты различаются.

Я подозреваю, что мой код неисправен, но потратил час на то, чтобы разгребать его, но безрезультатно.

Мы будем очень благодарны за любые советы по сортировке массивов в Groovy или по приведенному ниже коду:

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

person Richard Fortune    schedule 26.10.2010    source источник


Ответы (2)


В стороне, не можете ли вы заменить:

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++
}

с участием

def arrayOfInvoicesSTAGE  = responseInvoicesSTAGE.Invoice*.InvoiceID
def arrayOfInvoicesSTAGE2 = responseInvoicesSTAGE2.Invoice*.InvoiceID
person tim_yates    schedule 26.10.2010
comment
Молодец, спасибо за это, Тим. Это бесконечно красивый код! - person Richard Fortune; 27.10.2010

Два массива считаются в Groovy равными, если они имеют одинаковое количество элементов и все элементы в одной позиции равны. Вы можете проверить это, запустив следующий код в консоли Groovy

Integer[] foo = [1,2,3,4]
Integer[] bar = [4,3,2,1]

assert foo != bar

bar.sort()

assert foo == bar
person Dónal    schedule 26.10.2010
comment
Привет, Дон! Это подтверждает мое первоначальное понимание. Проблема, с которой я столкнулся выше, заключалась в том, что моя несортированная пара или массивы совпадали до сортировки и не совпадали после. - person Richard Fortune; 27.10.2010