列表到二维字符串的列表



我有一个由定义的列表的动态列表

List<List<String>> listOfLists = new ArrayList<List<String>>(); 

类似:

[[A, B, C, D], [E, F, G, H]]

在这个例子中,它有2组,每组4个项目,但它可以动态地有1组到n组。

现在,我需要一个2维字符串,所以类似于:

String[][] data ={{"A", "B", "C", "D"}, {"E", "F", "G", "H"}}

有没有一种方法可以很容易地转换它?如果没有,我如何动态创建二维String,其中我知道列数而不知道行数?

使用流尝试这样做。它对列表进行流式处理,并将每个内部列表转换为一个数组,然后将这两个数组转换为数组的数组。

List<List<String>>  list = List.of(
List.of("A", "B", "C", "D"),
List.of("E", "F", "G", "H"));
String[][] arr = list.stream()
.map(lst->lst.stream()
.toArray(String[]::new))
.toArray(String[][]::new);
System.out.println(Arrays.deepToString(arr));

打印

[[A, B, C, D], [E, F, G, H]]

你也可以这样做。

String[][] arr = new String[list.size()][];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i).toArray(new String[0]);
}

我的建议

private String[][] toMatrix(List<List<String>> listOfLists) {
int size = listOfLists.size();
String[][] result = new String[size][];
for (int i = 0; i < size; i++) {
List<String> list = listOfLists.get(i);
result[i] = new String[list.size()];
for (int j = 0; j < list.size(); j++) {
result[i][j] = list.get(j);
}
}
return result;
}

这应该有效:

private static String[][] convert(List<List<String>> listOfLists) {
var result = new String[listOfLists.size()][];
var i = 0;
for (var list : listOfLists) {
result[i] = new String[list.size()];
var j = 0;
for (var elem : list) {
result[i][j] = elem;
j++;
}
i++;
}
return result;
}

最新更新