有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java嵌套列表到数组的转换

将数据从嵌套列表转换为对象数组(可以用作JTable的数据)的最有效方法是什么

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

非常感谢


共 (2) 个答案

  1. # 1 楼答案

    要将嵌套列表转换为二维对象数组,可以使用以下代码:

    public Object[][] ToObjectMatrix(List<List<String>> data) throws IllegalArgumentException {
        if(data == null) {
            throw new IllegalArgumentException("Passed data was null.");
        }
    
        Object[][] result = new Object[data.size()][];
         
        for(int i = 0; i < data.size(); i++) {
            result[i] = data.get(i).toArray();
        }
         
        return result;
    }
    
  2. # 2 楼答案

    特别是对于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[][]的无意义转换