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

私のコードがエレガントかどうかはよくわかりません。null パラメータと null 結果が可能です。しかし...コード内の複雑な問題を解決したような気がします。この関数は、会社で使用されるユーティリティ クラスの一部です。サードパーティのライブラリの使用は許可されていません。

対応するテストは次のとおりです。

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

orを「初期化されていない」値としてInteger[]使用int[]してそのままにする代わりに。0Integer.MIN_VALUE

于 2012-12-14T11:42:56.720 に答える
0

@Peterが提案したように、または値をに割り当てることにより、nullチェックを回避します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 に答える