我使用Groovy從具有以下字段的CSV文件閱讀:什麼是Grooviest方法來模擬這些數據?
Code Name Class
--- ----- ----
1701 Enterprise Constitution
1864 Reliant Miranda
什麼是代表在Groovy這個數據的最佳方式?
我在想一個HashMap
其中代碼是鍵和值是兩個字段(名稱和類)一個POGO。但有沒有更方便的方法?
我使用Groovy從具有以下字段的CSV文件閱讀:什麼是Grooviest方法來模擬這些數據?
Code Name Class
--- ----- ----
1701 Enterprise Constitution
1864 Reliant Miranda
什麼是代表在Groovy這個數據的最佳方式?
我在想一個HashMap
其中代碼是鍵和值是兩個字段(名稱和類)一個POGO。但有沒有更方便的方法?
使用普通Map
與code
作爲關鍵就足夠了。這取決於你需要做什麼。如果您需要將此數據轉換爲Map
,那就是要走的路。
但是,groovy在數據處理方面非常有彈性,您還可以創建POGO並將此CSV數據轉換爲列表。它可以很容易地按code
或任何你需要分組。
此外,也許創建一個POGO是沒有必要的?在這種情況下使用code
一個關鍵.. 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