有没有Java技术可以解决类中重复的循环



我最近在网上提交了这段代码,作为编码挑战的一部分,作为我的反馈,我被告知我的部分代码可以改进以适应"良好实践"。我试着减少线条的数量,但没有给我任何提示,我仍然不确定如何改进。我希望我能得到一些帮助。

public class ArrayChecker {
public boolean check(int[] expected, int[] actual, int maxValue, int delta) {
// Clip 'too large' values
for (int i = 0; i < actual.length; ++i) {
if (actual[i] > maxValue) {
actual[i] = maxValue;
}
}
// Check for length differences
if (actual.length != expected.length) {
return false;
}
// Check that each entry is within the expected +/- delta
for (int i = 0; i < actual.length; ++i) {
if (Math.abs(expected[i] - actual[i]) > delta) {
return false;
}
}
return true;
}
}

我将首先检查actualexpected的长度。然后,我将在一个循环中用一个步骤测试delta并执行削波(Math.min(int, int)可以帮助(。比如

public boolean check(int[] expected, int[] actual, int maxValue, int delta) {
if (actual.length != expected.length) {
return false;
}
for (int i = 0; i < actual.length; ++i) {
if (Math.abs(expected[i] - Math.min(maxValue, actual[i])) > delta) {
return false;
}
}
return true;
}

如果使用Java8+,您可以将其简化为lambda。

public boolean check(int[] expected, int[] actual, int maxValue, int delta) {
if (actual.length != expected.length) {
return false;
}
return IntStream.range(0, actual.length)
.noneMatch(i -> Math.abs(expected[i] - Math.min(maxValue, actual[i])) > delta);
}

最后,一个(复杂的(单行返回,如

public boolean check(int[] expected, int[] actual, int maxValue, int delta) {
return actual.length == expected.length && IntStream.range(0, actual.length)
.noneMatch(i -> Math.abs(expected[i] - Math.min(maxValue, actual[i])) > delta);
}

最新更新