在我的项目中,我有一个List
,其中包含List
个String
s(List<List<String>>
),现在我必须将此List
转换为数组String
数组(String[][]
)。
如果我有一个List<String>
(例如myList
),那么我可以将其转换为String[]
:
String[] myArray = new String[myList.size()];
myArray = myList.toArray(myArray);
但是在这种情况下,我List
String
List
内有List
String
个{{1}}。
我怎样才能做到这一点?我花了很多时间,但我找不到解决方案..
答案 0 :(得分:10)
我几天前为自己的用法编写了一个通用的实用工具方法,将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,您可以修改泛型方法,将未初始化的数组作为2 nd 参数传递,而不是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);
请注意,由于现在我们将数组作为参数传递,因此您不再需要从方法中返回它。在数组中完成的修改将反映在调用代码中的数组中。
答案 1 :(得分:5)
String[][] myArray = new String[myList.size()][];
for (int i = 0; i < myList.size(); i++) {
List<String> row = myList.get(i);
myArray[i] = row.toArray(new String[row.size()]);
}
答案 2 :(得分:2)
这是一种方式
List<List<String>> list = new ArrayList<List<String>>();
String[][] array = new String[list.size()][];
int counter1 = 0;
for(List<String> outterList : list)
{
array[counter1] = new String[outterList.size()];
int counter2 = 0;
for(String s : outterList)
{
array[counter1][counter2] = s;
counter2++;
}
counter1++;
}
答案 3 :(得分:-1)
要初始化String [] [],您应该初始化String []
的列表(数组)所以你需要定义一个列表
List<String[]> string = new List<String[]>();
for (int i = 0;....)
{
String[] _str = new String[numbers];
_str[0] = ...
string.append(_str);
}