是否有 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;
  }
}

我会先检查 actualexpected 的长度。然后,我将测试增量并在一个循环中一步执行裁剪(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);
}