设计Comparator访问可能为空或空的字符串字段的最佳方法

时间:2014-10-31 15:45:34

标签: java string null comparison

我必须通过可能为空("")甚至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个案例。所以我想知道是否有更优雅的解决方案?

1 个答案:

答案 0 :(得分:3)

这里没有错。如果省略'rein'方法,则在o1.getSomeValue()返回null时会出现NullPointerException。所以这个检查对于正确的比较方法工作是必要的。很难想象更优雅的解决方案。