2008-12-16 21 views
5

İç içe geçmiş listelerden bir nesne dizisine (yani JTable verileri olarak kullanılabilen) veri dönüştürmenin en etkili yolu nedir?Java iç içe aktarılan listeyi dönüştürmek

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); 
} 

Çok teşekkürler!

cevap

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 hakkında bir şey bilmiyorum, ancak bir liste listesini diziye dönüştürmek birkaç satıra kadar yapılabilir.

7

özellikle JTable için, ben şöyle subclassing AbstractTableModel öneririm:

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); 
    } 
} 

Not: Bu olası en temel uygulamasıdır; kısalma için hata denetimi ihmal edilir.

Böyle bir model kullanarak, Object[][] numaralı telefona anlamsız dönüşümler hakkında endişelenmeniz gerekmez.

+0

İyi yanıt. Ancak, bu modele aktarılan verilerin başka yerde görünmediğini ve ninja düzenlemeye eğilimli olduğunu iki kez kontrol edin. Muhtemelen değil, ama eğer, burada klonlanmış olması gerekebilir. –

+0

İyi nokta. Bunu düşündüm, ancak DefaultTableModel aslında (vektörleri kullanır) kontrol etmez. Her neyse, bu mümkün olan en temel uygulamadır. ;) –

İlgili konular