4 回答
TA贡献1946条经验 获得超3个赞
您可以使用IntStream和allMatch
if(IntStream.of(lengthA,lengthB,lengthC).allMatch(i->i!=0)) {
// do a thing
}
noneMatch或者也使用
IntStream.of(lengthA,lengthB,lengthC).noneMatch(i->i==0)
另一种方法是使用 util 方法
public static boolean isNotZero(int val) {
return val!=0;
}
现在简化if条件
if (isNotZero(lengthA) && isNotZero(lengthB) && isNotZero(lengthC)) {
TA贡献1848条经验 获得超10个赞
你问了三件事;你要求的代码是
更短
更高效
清洁工
我有一个替代方案给你:
if ((lengthA & lengthB & lengthC) != 0)
这是正确的 - 它的作用与您的旧代码相同(它使用按位与)
它更短。
它可能更有效,但只有良好的微基准测试才能证实。即使是这样,也不应该指导您。由于第 3 点,只有当它在使用性能分析工具的应用程序中显示为瓶颈时才应考虑它,而这种可能性非常非常小。
但它并不干净。我的意思是,这将使您的代码更难以阅读和理解,并且任何维护您的代码的人现在都必须考虑位操作。
任何提议的替代方案很可能也是如此。
您在原始代码中所做的事情已经足够好了;这是人们所理解的,而且很可能是您可以为此目的编写的最简洁的代码。
TA贡献1810条经验 获得超5个赞
最佳答案(恕我直言): “甚至不要尝试去猜测优化编译器。” 只需以最准确地指定(对您的人类同胞来说,仅此而已......)您希望计算机执行的操作的方式 指定源代码。不要假设实际提供给硬件的机器指令的实际序列实际上与此相对应。 “这很神奇。真的。”
添加回答
举报