我必须通过可能为空(""
)甚至null
的不同String属性对Collection进行排序。这两个值都是允许的,必须平等对待。
我通过使用一个方法解决了这个问题,该方法检查null
的每个字符串,并在找到null
时返回一个空字符串。
到目前为止,我的比较器基本上看起来像这样
public class MyComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
// ... some logical stuff like e.g.
return rein(o1.getSomeValue()).compareTo(rein(o2.getSomeValue());
}
private String rein(String str) {
return str == null ? "" : str;
}
}
我想知道这个设计是否合适或是否有理由反对它?如果不行,我还能做些什么来满足我的要求?所有那些(在大多数情况下是不必要的)函数调用对我来说都很难看,因为我们讨论的是大约1/1000个案例。所以我想知道是否有更优雅的解决方案?
答案 0 :(得分:3)
这里没有错。如果省略'rein'方法,则在o1.getSomeValue()返回null时会出现NullPointerException。所以这个检查对于正确的比较方法工作是必要的。很难想象更优雅的解决方案。