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

What is the Grooviest way to model this data?

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

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

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

我在想 HashMap,其中 Code 是键,值是具有两个字段的 POGO(NameClass)。但是有更好的方法吗?

使用普通的 Mapcode 作为键就足够了。这取决于你需要做什么。如果您需要将此数据转换为 Map,那就是要走的路。

然而groovy在数据处理方面非常灵活,您还可以创建一个 POGO 并将此 CSV 数据转换为列表。它可以很容易地按 code 或任何你需要的分组。

此外,也许没有必要创建 POGO?在这种情况下使用 code a a key to.. Map.

使用 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