几天前我写了一个通用实用程序方法供我自己使用,它将 a 转换List<List<T>>
为T[][]
. 这是方法。您可以将其用于您的目的:
public static <T> T[][] multiListToArray(final List<List<T>> listOfList,
final Class<T> classz) {
final T[][] array = (T[][]) Array.newInstance(classz, listOfList.size(), 0);
for (int i = 0; i < listOfList.size(); i++) {
array[i] = listOfList.get(i).toArray((T[]) Array.newInstance(classz, listOfList.get(i).size()));
}
return array;
}
我已经使用Array#newInstance()
方法创建了数组,因为您不能T
直接创建类型参数的数组。
由于我们正在创建一个二维数组,并且我们还不知道您将拥有多少列,所以我已经给出了0
最初的列大小。无论如何,代码在 for 循环中使用一个新数组初始化每一行。所以,你不必担心这一点。
这一行:
array[i] = listOfList.get(i).toArray((T[]) Array.newInstance(classz, listOfList.get(i).size()));
正如您已经做过的那样,使用该List#toArray(T[])
方法将内部列表转换为数组。我只是将一个数组作为参数传递给该方法,以便我得到的返回值是T[]
,我可以直接将其分配给当前行 - array[i]
。
现在您可以将此方法用作:
String[][] arr = multiListToArray(yourList, String.class);
感谢@arshaji,您可以修改通用方法以将未初始化的数组作为第二个参数传递,而不是Class<T>
:
public static <T> void multiListToArray(final List<List<T>> listOfList,
final T[][] arr) {
for (int i = 0; i < listOfList.size(); ++i) {
arr[i] = listOfList.get(i).toArray(arr[i]);
}
}
但是,您必须像这样将数组传递给此方法:
List<List<String>> list = new ArrayList<>();
// Initialize list
String[][] arr = new String[list.size()][0];
multiListToArray(list, arr);
请注意,由于现在我们将数组作为参数传递,因此您不再需要从方法中返回它。在数组中所做的修改将在调用代码中反映到数组中。