Java 类型不匹配:无法从IntStream转换为int

Java 类型不匹配:无法从IntStream转换为int,java,java-8,Java,Java 8,我在编译此代码时遇到如下问题: int[][] result = Arrays.stream(board) .map(r -> IntStream.range(0, board[0].length) .map(i -> IntStream.range(0, board.length).map(j -> decideAliveOrDied(i, j, board))) .toA

我在编译此代码时遇到如下问题:

int[][] result = Arrays.stream(board)
            .map(r -> IntStream.range(0, board[0].length)
                    .map(i -> IntStream.range(0, board.length).map(j -> decideAliveOrDied(i, j, board)))
                    .toArray())
            .toArray(int[][]::new);
板是输入矩阵,我们可以在其中进行一些转换。方法DecideAliveOrder(int i,int j,int[][]板)将给定行索引i、列索引j和矩阵板的每个输入矩阵单元转换为另一个单元。结果矩阵是矩阵上整个修改的输出

有关更多信息,请参见我的方法

public int decideAliveOrDied(int i, int j, int[][] board) {
        int result = 0;
        ArrayList<Integer> list = getNeighbors(i, j, board[0].length, board.length, board);
        int numberOfLiveCell = (int) list.stream().filter(number -> number == 1).count();
        if (board[i][j] == 1 && numberOfLiveCell < 2) {
            result = 0;
        }
        if (board[i][j] == 1 && (numberOfLiveCell == 2 || numberOfLiveCell == 3)) {
            result = 1;
        }
        if (board[i][j] == 1 && numberOfLiveCell > 3) {
            result = 0;
        }
        if (board[i][j] == 0 && numberOfLiveCell == 3) {
            result = 1;
        }

        return result;
    }
public int decidealiverded(int i、int j、int[]board){
int结果=0;
ArrayList=GetNeights(i,j,board[0]。长度,board.length,board);
int numberOfLiveCell=(int)list.stream().filter(number->number==1.count();
if(board[i][j]==1&&numberOfLiveCell<2){
结果=0;
}
如果(board[i][j]==1&&(numberOfLiveCell==2 | | numberOfLiveCell==3)){
结果=1;
}
if(board[i][j]==1&&numberOfLiveCell>3){
结果=0;
}
if(board[i][j]==0&&numberOfLiveCell==3){
结果=1;
}
返回结果;
}
但我得到一个编译错误,如下所述:

- Type mismatch: cannot convert from IntStream to int
- The method map(IntUnaryOperator) in the type IntStream is not applicable for the arguments ((<no 
     type> j) -> {})
-类型不匹配:无法从IntStream转换为int
-IntStream类型中的方法映射(IntUnaryOperator)不适用于参数((j)->{})

提前感谢您的帮助。

很难猜到您想要实现什么目标。据我所知,您的代码可以简化为:

int[][] finalBoard = new int[board.length][board[0].length];

for (int i = 0; i < board.length; i++) {
    for (int j = 0; j < board[i].length; j++) {
        int result = decideAliveOrDied(i, j, board);    
        finalBoard[i][j] = result;
    }
}
int[]finalBoard=newint[board.length][board[0.length];
对于(int i=0;i

您不必总是使用流。特别是如果您最终拥有三个嵌套的
map
s

我真的不确定streamapi在这里是一个好的解决方案。但是您正在将
IntStream
映射到另一个流。用于:

....
.map(r -> IntStream.range(0, board[0].length)
        .flatMap(i -> IntStream.range(0, board.length).map(j -> decideAliveOrDied(i, j, board)))
        .toArray())
....

你能发布
decidealiverded
的定义吗?@MarkoPacak检查我编辑的帖子。三个流操作太多了,除非你真的有一个三维结构。但事实上,你没有在任何地方使用
r
,这说明你没有。