簡體   English   中英

類型不匹配:無法從IntStream轉換為int

[英]Type mismatch: cannot convert from IntStream to int

編譯以下代碼時遇到問題:

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

電路板是我們可以進行一些轉換的輸入矩陣。 方法DecisionAliveOrDied(int i,int j,int [] [] board)對於給定的行索引i,列索引j和矩陣板,將每個輸入矩陣的單元格轉換為另一個單元格。 結果矩陣是上矩陣整個修改的輸出。

有關更多信息,這是我的方法defineAliveOrDied

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

但是我得到了一個編譯錯誤,如下所示:

- 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) -> {})

在此先感謝您的幫助。

很難猜出您要實現的目標。 據我了解,您的代碼可以簡化為:

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

不必總是使用流。 特別是如果您最終擁有三個嵌套map

真的不確定在這里stream api是很好的解決方案。 但是您正在將IntStream映射到另一個流。 為此使用flatMap

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM