java - 如何使用 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
你能告诉我我做错了什么以及如何解决它吗?谢谢。
解决方案
您可以将结果更改Array
为Boolean
:
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)
.
推荐阅读
- 3dsmax - 一种盖住洞的方法
- python - 将 np 数组 M 排序为两个集合和数组,使得它们没有共同的元素
- scala - 为什么在尝试使用 ScalaTest 时出现“无法初始化类 org.apache.logging.log4j.LogManager”?
- python - python中Kmeans算法的限制
- reactjs - ReactJs Redux Firestore Cors 政策
- python - 为什么 dataframe 上的 result_type = “expand” 这么慢?
- javascript - 如何在 Asp.net MVC 中使用复选框从数据库中选择数据?
- python - 为什么我的表单没有保存到数据库中?
- python - 列表未正确传输到 Dataframe
- r - 如何在 R 中绘制多线图