我有一个由int组成的二维数组,以及一个带有参数的方法,该参数指向其一行之一。我想在该行的非零元素上返回Set
,并且我想在不使用for循环的情况下执行此操作。这就是我尝试过的:
public Set<Integer> getNeighbors(int node) {
assert node >= 0 && node < numNodes : "getNeighbors(): Invalid node parameter given: " + node + ".";
return Arrays.stream(matrix[node]).filter(n->n>0).collect(Collectors.toSet());
}
不幸的是,我遇到了一个编译时错误,很难解析:
有什么想法吗?
答案 0 :(得分:5)
return Arrays.stream(matrix[node])
.filter(n -> n > 0)
.boxed()
.collect(Collectors.toSet());
会做到的。 .boxed()
位是相关部分。
答案 1 :(得分:2)
您正在尝试使用int原语创建Set
,(Arrays.stream
“ 返回以指定IntStream
作为其源的顺序Array
“)和Set<int>
不允许。您要添加boxed()
来将IntStream
转换为Stream<Integer>
:
public Set<Integer> getNeighbors(int node) {
assert node >= 0 && node < numNodes : "getNeighbors(): Invalid node parameter given: " + node + ".";
return Arrays.stream(matrix[node]) //IntStream
.filter(n->n>0)
.boxed() //Convert to Stream<Integer>
.collect(Collectors.toSet());
}