是否有 Java 技术来解决 class 中的重复循环?
Is there a Java technique to solve duplicate loops in a class?
我最近提交了这段代码作为在线编码挑战的一部分,作为我反馈的一部分,我被告知我的部分代码可以改进以适应 "good practice"。我曾尝试减少行数,但没有得到任何提示,我仍然不确定如何改进。希望能得到一些帮助。
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;
}
}
我会先检查 actual
和 expected
的长度。然后,我将测试增量并在一个循环中一步执行裁剪(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;
}
如果使用 Java 8+,您可以将其简化为 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);
}
最后,一行(复杂的)return,比如
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);
}
我最近提交了这段代码作为在线编码挑战的一部分,作为我反馈的一部分,我被告知我的部分代码可以改进以适应 "good practice"。我曾尝试减少行数,但没有得到任何提示,我仍然不确定如何改进。希望能得到一些帮助。
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;
}
}
我会先检查 actual
和 expected
的长度。然后,我将测试增量并在一个循环中一步执行裁剪(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;
}
如果使用 Java 8+,您可以将其简化为 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);
}
最后,一行(复杂的)return,比如
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);
}