どのようにJavaでストリームを使用してブール値の2D配列に整数の2D配列に変換するには?

Ajrc:

私はそうのような整数(0または1)の2次元配列を持っています...

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

そして私は、Javaストリームと(.MAP)を使用して、ブール値の2次元配列に変換します。得られた配列です。

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

私の最新の試みがありました。

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

しかし、私のコードがコンパイルされていない、エラーメッセージは次のとおりです。

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

あなたは私が間違っているとどのようにそれを修正するのです何を教えてもらえますか?ありがとうございました。

Ousmane D .:

あなたが必要な場合はBoolean[][]、結果として、それはから受信機の種類を変更するような単純なようだbooleanBoolean

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

しかし、あなたがしたいと思われるboolean[][]結果として、残念ながら、何があるのでBooleanStream、それは読みやすさや簡潔さは最高ではないとしてストリームを経由して、これを実行するのが賢明ではないでしょう、むしろ不可欠なアプローチが良くないだろう。

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=238911&siteId=1