Java 自定义对象和日期的比较方法


public int compare(Event e1, Event e2) {
if (e1 == null && e2 == null) {
return 0;
} else if (e1 == null && e2 != null) {
return -1;
} else if (e1 != null && e2 == null) {
return 1;
} else if (e1.getDate() == null && e2.getDate() == null) {
return 0;
} else if (e1.getDate() == null && e2.getDate() != null) {
return -1;
} else if (e1.getDate() != null && e2.getDate() == null) {
return 1;
} else
return e1.getDate().compareTo(e2.getDate());
}

嘿,想问一些更好的方法来编写上面的代码,以便进行比较器练习。 要求是以两个空值相等且空值始终小于(相比之下(非空值的方式处理空值。

这段代码是完全有用的,但在我看来它只是粗略的。 想在这里听到一些意见和开胃小斋:)

你快到了。只需删除一些额外的不必要的检查即可。

也没有必要使用else if,因为你正在return

public int compare(Event e1, Event e2) {
// nulls are equal
if (e1 == null && e2 == null) {
return 0;
} 
// A null is always less than anything.
if (e1 == null) {
return -1;
}
if (e2 == null) {
return 1;
}
// null dates are equal
if (e1.getDate() == null && e2.getDate() == null) {
return 0;
}
// A null is always less than anything.
if (e1.getDate() == null) {
return -1;
}
if (e2.getDate() == null) {
return 1;
}
// All present - use normal date comparison.
return e1.getDate().compareTo(e2.getDate());
}

你不能跳过与 null 的比较,你可以抛出 NullPointerException 来通知你不比较 null,或者你可以写一些更专业的代码,这是非常主观的,例如:

public int compare(Event e1, Event e2) {
if (e1 == null) return -compareToNull(e2);
if (e2 == null) return compareToNull(e1);
if (e1.getDate() == null) return -compareToNull(e2.getDate());      
if (e2.getDate() == null) return compareToNull(e1.getDate());
return e1.getDate().compareTo(e2.getDate());
}
private int compareToNull(Object e) {
return e == null ? 0 : 1;
}

或代码高尔夫风格:

public int compare(Event e1, Event e2) {
if (e1 == null || e2 == null) return compareNull(e1, e2);
if (e1.getDate() == null || e2.getDate() == null) return compareNull(e1.getDate(), e2.getDate());
return e1.getDate().compareTo(e2.getDate());
}
private int compareNull(Object e1, Object e2) {
return e1 == null && e2 == null ? 0 : e2 == null ? 1 : -1;
}

相关内容

  • 没有找到相关文章

最新更新