gpt4 book ai didi

Java - 如何使用 lambda 表达式缩短 if 语句?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:55 26 4
gpt4 key购买 nike

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

我有以下代码:

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

代码应该检查当前玩家在当前字段上方、下方或旁边是否有任何环。

我试图通过使用 lambda 表达式使这段代码更具可读性,但我做不好。不过,我不确定这是否可行。

我尝试用变量 field 替换 fields[x][y] 然后让 field 变成 fields[x ][y+1], 字段[x][y-1], 字段[x+1][y], 字段[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]};

但这给了我一个语法错误,正如我所料,因为 field = {fields[x][y+1], fields[x][y-1], fields[x+1][y ], fields[x-1][y]}; 将字段设置为一个数组,并且不遍历该数组。

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

最佳答案

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

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

然后测试这些值是否符合条件:

boolean result = neighbors.stream().anyMatch(field -> field.getRing().getPlayer() == player);

这不一定会使代码更快或更短,但会使其更具可读性和 DRY。

关于Java - 如何使用 lambda 表达式缩短 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com