1

在我的项目中,我有一个List包含Lists of Strings ( List<List<String>>) 的 a,现在我必须将其转换List为数组String数组 ( String[][])。

如果我有一个List<String>(例如myList),那么我可以这样做以转换为String[]

String[] myArray = new String[myList.size()];
myArray = myList.toArray(myArray);

但在这种情况下,我有很多内部(of of Lists )。我怎样才能做到这一点?我花了很多时间,但我没有找到解决方案..StringListListString

4

4 回答 4

10

几天前我写了一个通用实用程序方法供我自己使用,它将 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);

请注意,由于现在我们将数组作为参数传递,因此您不再需要从方法中返回它。在数组中所做的修改将在调用代码中反映到数组中。

于 2013-08-23T16:17:15.130 回答
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()]);
 }
于 2013-08-23T16:22:39.903 回答
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++;
}
于 2013-08-23T16:19:36.087 回答
-1

要初始化 String[][],你应该初始化 String[] 的列表(数组)

所以你需要定义一个列表

List<String[]>  string = new List<String[]>();
for (int i = 0;....)
{
String[] _str = new String[numbers];
_str[0] = ...
string.append(_str);
}
于 2013-08-23T16:23:05.050 回答