我正在使用Groovy从具有以下字段的CSV文件中读取:
Code Name Class
--- ----- ----
1701 Enterprise Constitution
1864 Reliant Miranda
在Groovy中表示此数据的最佳方法是什么?
我在想HashMap
Code 是关键,值是带有两个字段的POGO( Name 和 Class )。但是有更古怪的方式吗?
答案 0 :(得分:1)
使用带有Map
的普通code
作为密钥就足够了。这取决于你需要做什么。如果您需要将此数据转换为Map
即可。
然而,groovy在数据处理方面非常有弹性,您还可以创建POGO并将此CSV数据转换为列表。它可以按code
或您需要的任何内容轻松分组。
另外,也许没有必要创建POGO?在这种情况下,请使用code
一个密钥来{。{1}}。
答案 1 :(得分:1)
使用POGO和TupleConstructor
AST转换,将CSV解析为列表通常非常简单:
@Grapes(
@Grab(group='org.apache.commons', module='commons-csv', version='1.2')
)
import groovy.transform.*
import org.apache.commons.csv.*
@ToString
@TupleConstructor
class Test {
int code
String name
String type
}
def text = ''' Code,Name,Class
1701,Enterprise,Constitution
1864,Reliant,Miranda'''
def parsed = CSVParser.parse(text, CSVFormat.EXCEL.withHeader().withIgnoreSurroundingSpaces().withQuote(null))
def result = parsed.getRecords().collect { new Test(it.Code as int, it.Name, it['Class']) }
assert '[Test(1701, Enterprise, Constitution), Test(1864, Reliant, Miranda)]' == result.toString()
assert 'Enterprise' == result.find({ it.code == 1701 }).name