Java “确定最大整数”;“已保存空值”;

Java “确定最大整数”;“已保存空值”;,java,max,Java,Max,我需要一个最后的审查和一些关于我写的函数的提示 public static Integer max(Integer... pNumber) { Integer lResult = null; for (Integer lNumber : pNumber) { if (lResult == null || (null != lNumber && lNumber > lResult)) { lResult = lNumber;

我需要一个最后的审查和一些关于我写的函数的提示

  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));    
}

提前感谢

我不想使用
null
对象,因为
Integer[]
使用的内存是
int[]的6倍

Collections.max(Arrays.asList(pNumber));
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;
}

我将使用
int[]
而不是
Integer[]
,并将
0
Integer.MIN\u值
保留为我的“未初始化”值。

我将避免@Peter建议的空检查,或通过将值分配给
Integer.MIN\u值

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;
}

它允许空参数吗?不,它不允许空值。上面的测试将失败。。。所以我必须删除空值?这是一个有点繁重的操作,不是吗。基本上执行“newinteger[…];System.arraycopy(…);”只是为了找到数组中的最大整数。这不仅更短更清晰,而且更快
assertEquals(9,NumberUtils.max(4,2,-4,null,9,5))null
,则会有一个额外的括号
NullPointerException
。@Torben它不会有Long.MIN\u值;)