2015-11-11 78 views
3

我使用Groovy從具有以下字段的CSV文件閱讀:什麼是Grooviest方法來模擬這些數據?

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

什麼是代表在Groovy這個數據的最佳方式?

我在想一個HashMap其中代碼是鍵和值是兩個字段(名稱)一個POGO。但有沒有更方便的方法?

回答

1

使用普通Mapcode作爲關鍵就足夠了。這取決於你需要做什麼。如果您需要將此數據轉換爲Map,那就是要走的路。

但是,groovy在數據處理方面非常有彈性,您還可以創建POGO並將此CSV數據轉換爲列表。它可以很容易地按code或任何你需要分組。

此外,也許創建一個POGO是沒有必要的?在這種情況下使用code一個關鍵.. Map

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 
相關問題