comparator 字符串比较大小_java – 如何使用Comparator比较空值?
我有幾個比較器 – 一個用于日期,一個用于小數(shù),一個用于百分比等.
起初我的十進(jìn)制比較器看起來像這樣:
class NumericComparator implements Comparator {
@Override
public int compare(String s1, String s2) {
final Double i1 = Double.parseDouble(s1);
final Double i2 = Double.parseDouble(s2);
return i1.compareTo(i2);
}
}
生活很簡單.當(dāng)然,這不處理字符串不可解析的情況.所以我改進(jìn)了compare():
class NumericComparator implements Comparator {
@Override
public int compare(String s1, String s2) {
final Double i1;
final Double i2;
try {
i1 = Double.parseDouble(s1);
} catch (NumberFormatException e) {
try {
i2 = Double.parseDouble(s2);
} catch (NumberFormatException e2) {
return 0;
}
return -1;
}
try {
i2 = Double.parseDouble(s2);
} catch (NumberFormatException e) {
return 1;
}
return i1.compareTo(i2);
}
}
生活更美好.測試感覺更穩(wěn)固.但是,我的代碼審查員指出,“空值怎么樣?”
好的,所以現(xiàn)在我必須用NullPointerException重復(fù)上面的內(nèi)容,或者在方法體前加上:
if (s1 == null) {
if (s2 == null) {
return 0;
} else {
return -1;
}
} else if (s2 == null) {
return 1;
}
這種方法很龐大.最糟糕的是,我需要用其他三個類重復(fù)這個模式,這個類比較不同類型的字符串,并且在解析時可能引發(fā)其他三個異常.
我不是Java專家.有沒有更清潔,更整潔的解決方案而不是 – 喘氣 – 復(fù)制和粘貼?只要記錄在案,我是否應(yīng)該因缺乏復(fù)雜性而交換正確性?
更新:有人建議處理空值不是比較器的工作.由于排序結(jié)果顯示給用戶,我確實(shí)希望空值一致排序.
總結(jié)
以上是生活随笔為你收集整理的comparator 字符串比较大小_java – 如何使用Comparator比较空值?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学习笔记:常用第三方模块3
- 下一篇: Tensorflow:interacti