Cómo convertir una matriz 2D de enteros en una matriz 2D de booleanos utilizando corrientes en Java?

AJRC:

Tengo una matriz 2D de números enteros (0 o 1) como así ...

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}
    };

y quiero convertirlo en una matriz 2D de booleanos utilizando Java arroyos y .map (). La matriz ser resultante:

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}
    };

Mi último intento fue:

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

Pero mi código no es la compilación, el mensaje de error es:

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

¿Me podría decir lo que estoy haciendo mal y cómo solucionarlo? Gracias.

Ousmane D .:

si necesita una Boolean[][]como resultado entonces es tan simple como cambiar el tipo de receptor booleana Boolean:

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

Sin embargo, parece que quiere una boolean[][]como resultado; Por desgracia, ya que no es BooleanStreamque no sería prudente realizar esto a través de una corriente como la lectura o la concisión no es la mejor, en lugar de un enfoque imperativo sería mejor:

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;
}

Supongo que te gusta

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