为了账号安全,请及时绑定邮箱和手机立即绑定

通过java流计算二维数组中的邻居

通过java流计算二维数组中的邻居

慕姐4208626 2022-05-25 15:43:33
我有一个像这样的二维数组:0,1,1,1,00,1,0,1,11,0,1,0,11,1,1,0,00,0,1,0,0当数字为1时,我想计算相邻单元格的总和。前任。对于 i=1,j=1,总和为 4。循环计数不是问题,但是是否可以通过 java 流进行计数(当然是 ArrayList 而不是 tab[][])?private void countAlive(Cell[][] cell) {        for (int i = 0; i < cell.length; i++) {            for (int j = 0; j < cell[0].length; j++) {                cell[i][j].setAlive(0);                if (cell[i - 1][j - 1].cellAlive())                    cell[i][j].increaseAlive();                if (cell[i - 1][j].cellAlive())                    cell[i][j].increaseAlive();                if (cell[i - 1][j + 1].cellAlive())                    cell[i][j].increaseAlive();                if (cell[i][j - 1].cellAlive())                    cell[i][j].increaseAlive();                if (cell[i][j + 1].cellAlive())                    cell[i][j].increaseAlive();                if (cell[i + 1][j - 1].cellAlive())                    cell[i][j].increaseAlive();                if (cell[i + 1][j].cellAlive())                    cell[i][j].increaseAlive();                if (cell[i + 1][j + 1].cellAlive())                    cell[i][j].increaseAlive();            }        }    }
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

流非常适合抽象迭代完成的方式并专注于您想要在对象上/与对象执行的实际过程。但是,当迭代顺序无关紧要时,这很有用。在这种情况下,它确实:不是订单本身,而是每个步骤中对象的索引,本质上是它与 2D 数组的其他对象相比的相对位置。当您流式传输该数组 Cell[][] 时,您一次得到一个 Cell 对象,没有它的索引。


Arrays(array2DofCells).stream().flatMap(x ->Arrays.stream(x))

.forEach( cell -> { //What would you do here without the indexes? } )

一种方法是让每个 Cell 知道它的索引,以便您可以调用cell.getRowIndex()并cell.getColumnIndex()执行您想要在父 2D 数组上执行的过程。


但是,正如评论中所指出的,除非有非常具体的原因,否则这似乎是避免流的情况。对此的指针是,您开始在 .forEach() 的范围内想知道如何获取流有意隐藏的信息。


查看完整回答
反对 回复 2022-05-25
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

我想你可能正在寻找类似的东西:


var cells = [

"01110",

"01011",

"10101",

"11100",

"00100",

];


for (var i = 0; i < cells.length; i++) {

for (var j = 0; j < cells[i].length; j++) {

if (cells[i][j - 1] == "1") {cellAlive();}

if (cells[i][j + 1] == "1") {cellAlive();}

if (cells[i - 1][j] == "1") {cellAlive();}

if (cells[i + 1][j] == "1") {cellAlive();}

}

}

如果这不是您要查找的内容,您能否更具体一些?希望这可以帮助!


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信