千萬人有一個想法如何轉換2維列表:轉換列表到對象[] []
private List<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();
到數組:Object [][] data;
? 我注意到data.asList(new Object[i][j]
);僅返回1維,如T[]
。當然,j維總是不變的。
千萬人有一個想法如何轉換2維列表:轉換列表到對象[] []
private List<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();
到數組:Object [][] data;
? 我注意到data.asList(new Object[i][j]
);僅返回1維,如T[]
。當然,j維總是不變的。
您可以使用for循環併爲每個內部列表調用toArray()
。
Object[][] arr = new Object[data.size()][];
int i = 0;
for(ArrayList<Object> list : data){
arr[i++] = list.toArray();
}
隨着java-8,可以在每次內部列表映射到一個數組,然後構造所產生的數組:
Object[][] arr = data.stream().map(List::toArray).toArray(Object[][]::new);
非常感謝。它完全解決了我的問題。我也會試用1.8的功能,它會迫使我看到新功能肯定:) – Gazeciarz
據我所知,你必須遍歷列表中的所有陣列像這樣:
Object[][] objs = new Object[data.size()][];
for(int i= 0; i < data.size(); i++)
objs[i] = data.get(i).toArray();
如何使用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][]);
下面是一些示例性數據
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][]);
}
使用循環整個主要方法。在此循環中,將每個內部列表轉換爲Object []。 –