Collections Groovy GroupBy字段,带空格和不带空格

Collections Groovy GroupBy字段,带空格和不带空格,collections,groovy,Collections,Groovy,我有发票清单如下 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,'] 我试图在上面的集合中使用INVOICE\u NU

我有发票清单如下

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,']
我试图在上面的集合中使用
INVOICE\u NUMBER
进行分组,并尝试使用
INVOICE\u NUMBER
和行作为值实现映射,下面的代码就是这样做的

def lines = invoices*.split('\\|').findAll{ it.size()>1 }
def heads = lines.first()
def invoiceMap =  lines.tail().collect{ [heads, it].transpose().collectEntries() }.groupBy{ it.INVOICE_NUMBER }
如果我打印
invoiceMap
我会得到我想要的地图

 [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,]]
  ]

但是如果
INVOICE\u编号
invoices
映射中有任何空格,则我的代码不起作用。有人能帮我在发票号上用空格写代码吗?

你只需要引用你的名字,就像这样

def invoiceMap=lines.tail().collect{[heads,it].transpose().collectEntries()}.groupBy{it.'INVOICE NUMBER'}

使用合适的CSV解析器,而不是自己滚动

@Grab('com.xlson.groovycsv:groovycsv:1.0')
import static com.xlson.groovycsv.CsvParser.parseCsv

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,']

def data = parseCsv(invoices.drop(1).join('\n'), separator:'|')
def invoiceMap = data.collect().groupBy { it.INVOICE_NUMBER }
或在列标题中加空格:

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,']

def data = parseCsv(invoices.drop(1).join('\n'), separator:'|')
def invoiceMap = data.collect().groupBy { it.'INVOICE NUMBER' }

只是为了确保我们谈论的是同一件事,哪一件不起作用?列标题中的空格(使用
发票编号
而不是
发票编号
)?或列值中的空格(
2015 03 01
而不是
20150301
)?列标题中的空格(使用发票号和一些空格代替发票号)