[英]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.