Como converter uma matriz 2D de inteiros para uma matriz 2D de booleanos usando fluxos em Java?

AJRC:

Eu tenho uma matriz 2D de inteiros (0 ou 1), como assim ...

int [][] gridInt = {
        {0, 0, 0, 1, 0, 0},
        {0, 0, 1, 1, 0, 0},
        {1, 0, 1, 0, 0, 1},
        {0, 0, 0, 0, 1, 0},
        {0, 1, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0}
    };

e eu quero convertê-lo em uma matriz 2D de booleanos usando Java córregos e .map (). A matriz resultante ser:

boolean[][] gridBool = {
        {false, false, false, true, false, false},
        {false, false, true, true, false, false},
        {true, false, true, false, false, true},
        {false, false, false, false, true, false},
        {false, true, false, false, false, false},
        {false, false, false, false, false, false}
    };

Minha última tentativa foi:

boolean[][] gridBool = Arrays.stream(gridInt)
    .map(row -> Arrays.stream(row)
        .mapToObj(i -> i == 1)
        .toArray(Boolean[]::new)
    )
    .toArray(Boolean[][]::new);

Mas o meu código não está compilando, a mensagem de erro é:

error: incompatible types: inferred type does not conform to upper bound(s)
        .toArray(Boolean[][]::new);
                ^
inferred: Boolean[]
upper bound(s): boolean[],Object

Você poderia me dizer o que estou fazendo de errado e como corrigi-lo? Obrigado.

Ousmane D .:

Se você precisar de um Boolean[][], como resultado, então é tão simples como mudar o tipo de receptor a partir booleande Boolean:

Boolean[][] gridBool = Arrays.stream(gridInt)
                .map(row -> Arrays.stream(row)
                        .mapToObj(i -> i == 1)
                        .toArray(Boolean[]::new)
                )
                .toArray(Boolean[][]::new);

No entanto, parece que você quer um boolean[][]como resultado; Infelizmente, uma vez que não é BooleanStream, não seria sábio para executar esta através de um fluxo como a legibilidade ou concisão não é a melhor, em vez de uma abordagem imperativo seria melhor:

boolean[][] result = new boolean[gridInt.length][];
for (int i = 0; i < gridInt.length; i++) {
     boolean[] temp = new boolean[gridInt[i].length];
     for (int j = 0; j < gridInt[i].length; j++) 
          temp[j] = gridInt[i][j] == 1;         
     result[i] = temp;
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=238910&siteId=1
Recomendado
Clasificación