2014-04-27 4 views
1

ли кто-нибудь есть идеи, как преобразовать список 2 размера:Convert Список ArrayList объектов в Object [] []

private List<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>(); 

в массив: Object [][] data;? Я заметил, что data.asList (new Object[i][j]); возвращает только 1 размер, например T[]. Конечно, j-мерность всегда постоянна.

+0

использовать цикл. И внутри этого цикла преобразуйте каждый внутренний список в Object []. –

ответ

4

Вы можете использовать цикл for и позвонить toArray() для каждого внутреннего списка.

Object[][] arr = new Object[data.size()][]; 
int i = 0; 
for(ArrayList<Object> list : data){ 
    arr[i++] = list.toArray(); 
} 

С , вы можете отобразить каждый внутренний список в массив, а затем построить результирующий массив:

Object[][] arr = data.stream().map(List::toArray).toArray(Object[][]::new); 
+0

Спасибо вам большое. Это полностью решило мою проблему. Я также попробую с 1.8 функциями, это заставит меня увидеть новые функции наверняка :) – Gazeciarz

0

Насколько я знаю, вы должны перебрать все массивы в списке например:

Object[][] objs = new Object[data.size()][]; 
for(int i= 0; i < data.size(); i++) 
    objs[i] = data.get(i).toArray(); 
0

Как использовать потоки Java8?

data.stream() 
      .map(il -> il.stream().toArray(size -> new Integer[size])) 
// OR THIS .map(il -> il.toArray(new Integer[0])) 
      .toArray(size -> new Integer[size][]); 
  1. поток - сделать что-то вроде итератора и проходит через все элементы (все списки)
  2. карта - передача элементов (List) в то, что вы хотите (Array []). В то время как List может быть потоковым, вы делаете то же самое, но вы можете использовать Arrays
  3. toArray - вы передаете поток и завершаете его.

Вот весь Основной метод с некоторыми, например, данные

public static void main(String[] args) { 
    List<List<Integer>> data = new ArrayList<>(); 
    data.add(Arrays.asList(10, 11, 12, 13)); 
    data.add(Arrays.asList(20, 21, 22, 23)); 
    Integer[][] result = data.stream() 
      .map(il -> il.toArray(new Integer[0])) 
      .toArray(size -> new Integer[size][]); 
} 
Смежные вопросы