У меня есть Map<String,List<Map<String,String>>> invoices
нижеGroovy печати Карта <String, List <Map <String, String >>> данные
invLineItems = [INV-Error_Test1:[[LINE:1, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test1, INVOICE_TOTAL:22], [LINE:2, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test1, INVOICE_TOTAL:24]],
INV-Error_Test2:[[LINE:3, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test2, INVOICE_TOTAL:26], [LINE:4, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test2, INVOICE_TOTAL:28,]]]
Я пытаюсь напечатать его, как показано ниже
println " INV-Error_Test2 Details "
invLineItems.get('INV-Error_Test2').each{
it.each{
print "LINE = "+ it['LINE']
}
}
И я получаю ниже погрешности groovy.lang.MissingPropertyException: No such property: LINE for class: java.util.LinkedHashMap$Entry
Помогла ли мне с этим печатать эти данные?
Примечание: Я на самом деле имеют в общей сложности 24 заголовков, но, чтобы сделать этот вопрос просто я просто отправил 4 заголовков (Line, Invoice_Date,Invoice-Number,Invoice_Total
), и я пытаюсь напечатать только несколько заголовков из 24
UPDATE: Am пытается обновить Map<String,List<Map<String,String>>> invoices
с invoiceErrors как ниже
InvoiceError // is an entity with below attributes
{ String errorMessage,
String invoiceNumber
}
ErrorMessage invoiceNumber
------------- -------------------
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_Test1
Line : 3 MATH ERROR INV-Error_Test2
Line : 3 Invoice does not foot Reported INV-Error_Test2
Am пытается достичь ниже карты Если сообщение об ошибке оленьей кожи имеет номер строки она должна быть добавлена на верхнем уровне, как ошибка invLineItems.put('error',['INV-Error_Test1' :
файла: файл находится в неподдерживаемом формате ])
В противном случае ErrorMessage должен быть приложен к согласующей ФАКТУРЕ и LINENUMBER ниже
invLineItems = [INV-Error_Test1:[[LINE:1, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test1, INVOICE_TOTAL:22, error : `Line : 1 Invoice does not foot Reported`],
[LINE:2, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test1, INVOICE_TOTAL:24, error : `Line : 2 MATH ERROR`],
INV-Error_Test2:[[LINE:3, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test2, INVOICE_TOTAL:26, , error : `Line : 3 MATH ERROR | Line : 3 Invoice does not foot Reported`],
[LINE:4, INVOICE_DATE:20150301, INVOICE_NUMBER:INV-Error_Test2, INVOICE_TOTAL:28,]],
error : [[INV-Error_Test1:`File Error : The file is in an unsupported format`]]
я написал ниже метод для достижения выше
def regex = "^Line\\s(?:(\\d+)\\s)?\\s*:\\s+(\\d+)?.+";
for (e in invLineItems){
def errors = lipErrors.findAll{it.invoiceNumber==e.key} // finding the error messages with the invoice number
errors.each{ // fetching the line numbre from error message and finding the matching record the invoice number and line number in invLineItems
int lineNumber
if (it.errorMessage.matches(regex)) {
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(it.errorMessage);
if (m.find()) {
lineNumber = Integer.parseInt(m.group());
}
println "lineNumber = "+lineNumber
}
if(e.value['LINE_ITEM_NUMBER'].find{it==lineNumber.toString()}) {
def data = lipErrors.findAll{it.invoiceNumber==e.key && it.errorMessage.matches("^Line\\s+"+lineNumber+"?\\:\\s+"+lineNumber+"?.+")}
e.getValue().each{it.put("error", data.errorMessage.join("|"))}
}
}
}
код не смотрит, как Groovy и с использованием традиционного кода Java в основном, мне интересно, можно ли упростить код с помощью подхода Groovy
Просто собирайтесь бросить это там: большую часть времени, когда у вас есть карта>, что вы действительно хотите, это Multimap. http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html –
dnault