首页 > 解决方案 > 如何使用 Java 中的流将 2D 整数数组转换为 2D 布尔数组?

问题描述

我有一个二维整数数组(0或1),像这样......

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() 将其转换为 2D 布尔数组。结果数组为:

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

你能告诉我我做错了什么以及如何解决它吗?谢谢。

标签: javadictionarymultidimensional-arraytype-conversionjava-stream

解决方案


您可以将结果更改ArrayBoolean

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

mapToObj需要一个Object,而不是原始类型boolean,所以我们不能使用toArray(boolean[][]::new).


推荐阅读