2014-04-27 136 views
1

千萬人有一個想法如何轉換2維列表:轉換列表到對象[] []

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. 地圖老話 - 傳輸元件(列表)到你想要的東西(數組[])。雖然列表可以流式傳輸,但您可以使用陣列,但您可以使用陣列
  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][]); 
}