0

我需要对我编写的函数进行最终审查和一些提示。

  public static Integer max(Integer... pNumber) {
    Integer lResult = null;
    for (Integer lNumber : pNumber) {
      if (lResult == null || (null != lNumber && lNumber > lResult)) {
        lResult = lNumber;
      }
    }
    return lResult;
  }

我不确定我的代码是否优雅。空参数以及空结果是可能的。但是......我感觉我在代码中解决了一些复杂的问题。该函数是公司使用的实用程序类的一部分。不允许使用第三方库。

这里对应的测试:

@Test
public void testMaxWithInteger() {
  assertEquals(new Integer(9), NumberUtils.max(4, 2, -4, null, 9, 5));    
}

提前致谢

4

3 回答 3

4

恕我直言,我不会使用null对象,因为Integer[]它可以使用 6 倍的内存int[]

public static Integer max(Integer... ints) {
    long ret = Long.MIN_VALUE;
    for (Integer i: ints) 
      if (null != i && i > ret) 
        ret = i;
    return ret >= Integer.MIN_VALUE? (int) ret : null;
}

而不是Integer[]我会使用int[]并离开0Integer.MIN_VALUE作为我的“未初始化”值。

于 2012-12-14T11:42:56.720 回答
0

我会避免像@Peter建议的那样进行空检查或将值分配给Integer.MIN_VALUE

public static Integer max(Integer... pNumber) {
    Integer lResult = Integer.MIN_VALUE;
    for (Integer lNumber : pNumber) {
        if (lNumber == null) { //continue if null value encountered. 
            continue;
        }
        if (lNumber > lResult) {
            lResult = lNumber;
        }
    }
    return lResult;
}
于 2012-12-14T11:50:02.417 回答
-2
Collections.max(Arrays.asList(pNumber));
于 2012-12-14T11:36:18.220 回答