Finding duplicate invoices
Putting the JSONArray aside (given I don't know the fully qualified name of the class), here's a Groovy-er version:

Working example

def invoiceList = [
    [INVOICE_DATE:20150617, INVOICE_NUMBER:617151,SENDER_COUNTRY:'USA', CLIENT_COUNTRY:'USA'],
    [INVOICE_DATE:20150617, INVOICE_NUMBER:617152,SENDER_COUNTRY:'CAD', CLIENT_COUNTRY:'MEX'],
    [INVOICE_DATE:20150617, INVOICE_NUMBER:617153,SENDER_COUNTRY:'CAD', CLIENT_COUNTRY:'MEX']
]

def senderCountry = invoiceList[0]['SENDER_COUNTRY']
def clientCountry  = invoiceList[0]['CLIENT_COUNTRY']

def result = invoiceList.inject([:]) { status, invoice -&gt;
    if(invoice['SENDER_COUNTRY'] != senderCountry) status &lt;&lt; ["SENDER_COUNTRY": "Multiple sender Countries Associated"]
    if(invoice['CLIENT_COUNTRY'] != clientCountry) status &lt;&lt; ["CLIENT_COUNTRY":"Multiple Client Countries Associated"]

    status
}

if(result) {
    println "Not all invoices have the same sender and client countries."
} else {
    println "All good"
}


How it works

The inject() method iterates through the invoiceList and calls a closure with an object to aggregate with and the current item in the list. Iteration begins with an empty Map as the aggregated object, which remains empty unless the un-matching countries are found. When a mismatch occurs, it is recorded in the Map. The closure purposely returns the Map because the output of the closure is what's fed back in during the next iteration.

Finally, if the resulting Map is empty, then all of the countries are the same. Otherwise, the Map contains one or two keys indicating what the problem was.

If all you really need to know is whether all the countries matched or not, you can simply use every():

def result = invoiceList.every { invoice -&gt;
    invoice['SENDER_COUNTRY'] == senderCountry &amp;&amp; invoice['CLIENT_COUNTRY'] == clientCountry
}