Groovy Map>> data manipulation method optimization
You can use Groovy's regular expression operators to create Java Matchers.

def invoices = [
'LEDES98BI V2',
'LINE|INVOICE_DATE|INVOICE_NUMBER|INVOICE_TOTAL',
'1|20150301|INV-Error_Test1|22',
'2|20150301|INV-Error_Test1|24',
'3|20150301|INV-Error_Test2|26',
'4|20150301|INV-Error_Test2|28,',
'5|20150301|INV WITH WHITESPACE|29,']    

def lines = invoices
    .findAll { it.contains('|') }
    .collect { it.tokenize('|') }

def headers = lines.first()
def invoiceMap =  lines.tail().collect{
    [headers, it].transpose().collectEntries()
}.groupBy{ it.INVOICE_NUMBER }

class InvoiceError {
    String errorMessage
    String invoiceNumber
}

[
    ['INV-Error_Test1', 'File Error : The file is in an unsupported format'],
    ['INV-Error_Test1', 'Line : 1 Invoice does not foot Reported'],
    ['INV-Error_Test1', 'Line : 2 MATH ERROR'],
    ['INV-Error_Test2', 'Line : 3 MATH ERROR'],
    ['INV-Error_Test2', 'Line : 3 Invoice does not foot Reported']
].collect {
    [['invoiceNumber', 'errorMessage'], it].transpose().collectEntries()
}.collect { it as InvoiceError }
.each {error -&gt;
   def matcher = error.errorMessage =~ /Line : (\d+) (.*)/

   if(matcher) {
       def lineNumber = matcher.group(1)
       def errorDescription = matcher.group(2)
       def line = invoiceMap[error.invoiceNumber]
           .find() { it.LINE == lineNumber }

       if(line.errors) {
           line.errors = "$line.errors |  $errorDescription"
       } else {
           line.errors = errorDescription
       }
   } else {
       if(!invoiceMap.errors) invoiceMap.errors = []
       invoiceMap.errors &lt;&lt; [(error.invoiceNumber): error.errorMessage]
   }
}

invoiceMap


In this example, I build the InvoiceError instances from a list that's transposed (btw, thank you for that trick). Each resulting map is coerced into an instance of InvoiceError.

I took a different approach by iterating through the errors and inserting them into the invoiceMap, rather than iterating through the invoiceMap and looking up the errors.