Java - 使用lambda表达式的if语句有多短?

HYB*_*R1D 3 java lambda

首先,我知道有类似的问题.然而,这个问题的答案对我没有帮助.

我有以下代码:

boolean result = fields[x][y + 1].getRing().getPlayer() == player || fields[x][y - 1].getRing().getPlayer() == player || fields[x + 1][y].getRing().getPlayer() == player || fields[x - 1][y].getRing().getPlayer() == player
Run Code Online (Sandbox Code Playgroud)

该代码应该检查当前播放器上方,下方或旁边是否存在当前播放器的响铃.

我试图通过使用lambda表达式使这些代码更具可读性,但我无法做到正确.不过,我不确定这是否可行.

我试图用fields[x][y]变量替换field然后field变成了fields[x][y+1], fields[x][y-1], fields[x+1][y], fields[x-1][y]

boolean result = field.getRing().getPlayer() == player -> field = {fields[x][y+1], fields[x][y-1], fields[x+1][y], fields[x-1][y]};
Run Code Online (Sandbox Code Playgroud)

但这给了我一个语法错误,这是我所期望的,因为field = {fields[x][y+1], fields[x][y-1], fields[x+1][y], fields[x-1][y]};将字段设置为数组,并且不会迭代该数组.

有什么办法可以使用lambda表达式缩短代码吗?

JB *_*zet 5

你在4个不同的值上不断重复相同的条件.所以你想要的实际上是避免这种重复,并写一次条件.并且您想要测试4个值中的任何一个是否与条件匹配.首先将4个值存储在集合中:

List<Field> neighbors = Arrays.asList(fields[x + 1][y],
                                      fields[x - 1][y],
                                      fields[x][y + 1],
                                      fields[x][y - 1]);
Run Code Online (Sandbox Code Playgroud)

然后测试这些值是否与条件匹配:

boolean result = neighbors.stream().anyMatch(field -> field.getRing().getPlayer() == player);
Run Code Online (Sandbox Code Playgroud)

这不一定使代码更快或更短,但它使它更具可读性和干燥性.