将List <list <integer >>转换为2D char数组?

时间:2019-02-12 03:07:25

标签: java algorithm

我有一个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()]);
    }
   }

3 个答案:

答案 0 :(得分:3)

Integerchar是不同的类型。如果您希望将整数表示为数字,则需要对其进行转换(广播只会提供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);