2008-12-16 16 views
5

नेस्टेड सूचियों से डेटा को ऑब्जेक्ट सरणी में परिवर्तित करने का सबसे प्रभावी तरीका क्या है (जिसका उपयोग यानी जेटीबल के लिए डेटा के रूप में किया जा सकता है)?जावा नेस्टेड सूची सरणी रूपांतरण

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

अच्छा जवाब। हालांकि, दोबारा जांचें कि इस मॉडल में पारित डेटा कहीं और दिखाई नहीं दे रहा है, और निंजा-संपादन के लिए प्रवण है। यह शायद नहीं है, लेकिन यदि ऐसा है, तो इसे यहां क्लोन करने की आवश्यकता हो सकती है। –

+0

अच्छा बिंदु। मैंने इसके बारे में सोचा, लेकिन DefaultTableModel वास्तव में या तो जांच नहीं करता है (यह वेक्टर का उपयोग करता है)। वैसे भी, यह सबसे बुनियादी कार्यान्वयन संभव है। ;) –