Используйте IntStream
. Это создаст непрерывный поток целых чисел от 0
включительно до n
эксклюзивно. Таким образом, для матрицы 3 x 3 IntStream
равно 0, 1, 2
.
сделать еще одно IntStream
для каждого целого числа во внешнем потоке от 0
до количества столбцов - также 3.
Вы не можете увеличить v
в потоке, потому что он должен быть "эффективно финальным". Вместо этого мы используем уравнение board[j][i] = 1 + (j + m * i)
, которое фактически аналогично вычислению индекса значения, если вы собираете плату в один массив (1D матрица).
import java.util.stream.IntStream;
import java.util.Arrays;
class J {
public static void main(String[] args) {
int n = 4;
int m = 2;
// n x m matrix
int[][] board = new int[n][m];
// Cols (m)
IntStream.range(0, m).forEach( i -> {
// Rows (n)
IntStream.range(0, n).forEach( j -> {
// Multiply i by row count
// to account for the row we are in
board[j][i] = 1 + (j + n * i);
});
});
System.out.println(Arrays.deepToString(board));
}
}
Выход:
[[1, 5], [2, 6], [3, 7], [4, 8]]
Примечание: Просто потому, что потоки позволяют вам писать более аккуратный, функциональный, похожий на программирование синтаксис, часто возникают связанные с этим потери производительности. Подчеркивается мысль: «Зачем чинить то, что не сломано?». Для доски 3 x 3 вы, вероятно, не увидите разницы. Но, если ваша доска была намного больше, она, вероятно, не оправдает себя, учитывая все созданные объекты и дополнительное пространство, используемое за сценой. Иногда лучше использовать простой цикл for (особенно при работе с массивами).
Помните, простота - это ключ.