使用 Java 集合排序时如何处理空值

在Java中使用Collection.sort时,当其中一个内部对象为空时,我应该返回什么

例:

Collections.sort(list, new Comparator<MyBean>() {
    public int compare(MyBean o1, MyBean o2) {
      return o2.getDate().compareTo(o1.getDate());
     } 

});

假设 o2 不是 null,而是 o2.getDate() 而是,那么在添加 null 验证时,我应该返回 1、-1 或 0 吗?


答案 1

当然,这是你的选择。无论你编写什么逻辑,它都会定义排序规则。所以“应该”在这里并不是一个正确的词。

如果您希望 null 出现在任何其他元素之前,则可以执行类似操作

public int compare(MyBean o1, MyBean o2) {
    if (o1.getDate() == null) {
        return (o2.getDate() == null) ? 0 : -1;
    }
    if (o2.getDate() == null) {
        return 1;
    }
    return o2.getDate().compareTo(o1.getDate());
} 

答案 2

在Java 8中,您还可以使用:nullsFirst()

Comparator.nullsFirst(Date::compareTo).compare(dateOne, dateTwo);

或:nullsLast()

Comparator.nullsLast(Date::compareTo).compare(dateOne, dateTwo);

这些方法将排序到开头或结尾。无论你认为比另一个物体更大还是更小,都没有错或对。正如其他人已经说过的那样,这完全取决于您。nullnull


推荐