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))我真的不明白为什么这会太复杂。您有特定的需求,必须编写与之匹配的代码。你不做任何其他事情,所以移除任何东西都不会获得优雅。当然,您可以用不同的方式格式化它(比如从变量名中删除那些愚蠢的前缀:),但这些只是个人/组织的首选项。我已经删除了“新整数(…)”。这是精神腹泻的结果:-)。@Vash:你的意思是写Integer.valueOf(int)。Parse不是Integer类中的方法。应避免使用新的Integer(1);若您确实必须使用Object,则使用Integer.valueOf(1);对于低于1.5的Java,如果更高,请使用1I,我喜欢匈牙利符号部分;-)@我也是如此,所以我正在移除它们;)如果此代码中的第一个整数是null
,则会有一个额外的括号NullPointerException
。@Torben它不会有Long.MIN\u值;)