什么是Grooviest方法来建模这些数据?

时间:2015-11-11 15:23:32

标签: java groovy object-model

我正在使用Groovy从具有以下字段的CSV文件中读取:

  Code   Name        Class
  ---    -----       ----
  1701   Enterprise  Constitution      
  1864   Reliant     Miranda 

在Groovy中表示此数据的最佳方法是什么?

我在想HashMap Code 是关键,值是带有两个字段的POGO( Name Class )。但是有更古怪的方式吗?

2 个答案:

答案 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