gpt4 book ai didi

java - 如何将 List> 转换为 String[][]?

转载 作者:行者123 更新时间:2023-12-01 06:28:46 25 4
gpt4 key购买 nike

在我的项目中,我有一个 List其中包含 ListString s ( List<List<String>> ) 现在我必须转换这个 List进入 String 的数组数组(String[][])。

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

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

但在这种情况下,我有很多 ListString里面 List (ListString 的)。我怎样才能做到这一点?我花了很多时间但没有找到解决方案..

最佳答案

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

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

关于java - 如何将 List<List<String>> 转换为 String[][]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com