我有一个List<List<Integer>> arr
的{{1}}。我需要将其转换为2D 2D_INTEGER_ARRAY
数组。我尝试使用下面的代码,但是它给出了明显的编译问题,但无法弄清楚该怎么做?
char[][]
错误是:
public static int largestMatrix(List<List<Integer>> arr) {
char[][] matrix = new char[arr.size()][];
for (int i = 0; i < arr.size(); i++) {
List<Integer> row = arr.get(i);
// below line is giving error
matrix[i] = row.toArray(new char[row.size()]);
}
}
答案 0 :(得分:3)
Integer
和char
是不同的类型。如果您希望将整数表示为数字,则需要对其进行转换(广播只会提供ASCII表示形式)。此外,您无法使用原始数组调用toArray()
。您必须手动进行迭代和转换:
matrix[i] = new char[row.size()];
for (int j = 0; j < row.size(); j++) {
matrix[i][j] = Character.forDigit(row.get(j), 10);
}
答案 1 :(得分:2)
基本上,您尝试在此行中将List<Integer>
转换为char[]
:
matrix[i] = row.toArray(new char[row.size()]);
您可以使用以下方法这样做:
matrix[i] = row.stream()
.map(j -> Integer.toString(j))
.collect(Collectors.joining())
.toCharArray();
答案 2 :(得分:1)
我们可以完全使用java-8流来完成此操作,如下所示:我从Kartik's的答案中得知,将Integer
的Stream转换为char[]
的Stream:>
List<List<Integer>> list = Arrays.asList(Arrays.asList(1,2,3), Arrays.asList(4,5,6), Arrays.asList(7,8,9));
char[][] chars = list.stream().map(l -> l.stream()
.map( i-> Integer.toString(i))
.collect(Collectors.joining())
.toCharArray())
.toArray(char[][]::new);