Преобразование ArrayList <String []> в String [] [] или Object [] []

1

Я хотел динамически генерировать массив фиксированного размера String [] (объект String [] []), заполненный w. Строки значений строк из db для создания JTable.

Для этого я использовал ArrayList из String [], динамически заполнил его. А затем преобразуйте его в Array, используя list.toArray(). Но.toArray() преобразовывает список только в одномерный массив либо Object [], либо T [].

Мне нужен String [] []/Object [] [], чтобы использовать конструктор JTable.

Код

Object[][] dlist = (Object[][]) al.toArray();

генерирует: java.lang.ClassCastException: [Ljava.lang.Object; не может быть добавлено к [[Ljava.lang.Object;

ers = pdao.getEmployeeResultSet(prs.getInt("PROJ_ID"));
ArrayList<String[]> alist = new ArrayList<String[]>();
while (ers.next()){
    String eid = ers.getString("EMP_ID");
    String ename = ers.getString("EMP_NAME");
    String gend = ers.getString("GENDER");
    String bd = ers.getString("BIRTHDATE");
    String addr = ers.getString("ADDRESS");
    String city = ers.getString("City");

    String[] str = {eid, ename, gend, bd, addr, city};
    alist.add(str);
}
Object[][] dlist = (Object[][]) al.toArray();
String[] cnames = {"EMP_ID","EMP_NAME","GENDER","BIRTHDATE","Address","City"};

jtable = new JTable(dlist, cnames);

Я использовал tuturial на: http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/components/SimpleTableDemoProject/src/компоненты/SimpleTableDemo.java для создания JTable.

Теги:
arrays
arraylist
classcastexception

2 ответа

-2
Лучший ответ

Я бы просто создал двойной массив самостоятельно, если вы действительно хотели:

public static String[][] getDArray(final ArrayList<String[]> aList) {
    final int size = aList.size();
    final String[][] ans = new String[size][];

    for(int i = 0; i < size; ++i)
        ans[i] = aList.get(i);

    return ans;
}
  • 0
    Да, спасибо. Это просто работает для моей цели ..
  • 0
    Этот метод небезопасен. String[][] s = getDArray(list); приведет к ClassCastException.
Показать ещё 2 комментария
1

Просто используйте

String[][] dlist = alist.toArray(new String[][]{});

Массив, который вы передаете методу, альтернативно может использоваться как фактический массив, который будет возвращен, если вы знаете размер (который вы делаете с alist.size()), но он действительно полезен для типа массива, который вы хотите.

Вы можете это подтвердить

String[][] holder = new String[alist.size()][];
String[][] returned = alist.toArray(holder);
System.out.println(holder == returned);

распечатает

true

Теперь, очевидно, поскольку массивы ковариантны, вы также можете делать

Object[][] dlist = al.toArray(holder);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню