2008-12-16 155 views
5

將數據從嵌套列表轉換爲對象數組(可用作JTable數據)的最有效方法是什麼?Java嵌套列表到數組轉換

List<List> table = new ArrayList<List>(); 

for (DATAROW rowData : entries) { 
    List<String> row = new ArrayList<String>(); 

    for (String col : rowData.getDataColumn()) 
     row.add(col); 

    table.add(row); 
} 

// I'm doing the conversion manually now, but 
// I hope that there are better ways to achieve the same 
Object[][] finalData = new String[table.size()][max]; 
for (int i = 0; i < table.size(); i++) { 
    List<String> row = table.get(i); 

    for (int j = 0; j < row.size(); j++) 
     finalData[i][j] = row.get(j); 
} 

非常感謝!

回答

5
//defined somewhere 
List<List<String>> lists = .... 

String[][] array = new String[lists.size()][]; 
String[] blankArray = new String[0]; 
for(int i=0; i < lists.size(); i++) { 
    array[i] = lists.get(i).toArray(blankArray); 
} 

我對JTable一無所知,但可以用幾行將列表轉換爲數組。

7

特別是對於JTable,我建議子類AbstractTableModel像這樣:

class MyTableModel extends AbstractTableModel { 
    private List<List<String>> data; 
    public MyTableModel(List<List<String>> data) { 
     this.data = data; 
    } 
    @Override 
    public int getRowCount() { 
     return data.size(); 
    } 
    @Override 
    public int getColumnCount() { 
     return data.get(0).size(); 
    } 
    @Override 
    public Object getValueAt(int row, int column) { 
     return data.get(row).get(column); 
    } 
    // optional 
    @Override 
    public void setValueAt(Object aValue, int row, int column) { 
     data.get(row).set(column, aValue); 
    } 
} 

注:這是最基本的實現成爲可能;錯誤檢查被省略以簡化。

使用這樣的模型,您不必擔心無意義轉換爲Object[][]

+0

很好的答案。但是,仔細檢查傳遞給此模型的數據在其他地方是不可見的,並且很容易忍者編輯。它可能不是,但如果是這樣,它可能需要在這裏克隆。 – 2008-12-16 16:57:16