java - 使用可比较的类进行排序

标签 java sorting comparable

我只是不知道如何解决这个问题。这是我收到的错误消息:

Exception in thread "main" java.lang.NullPointerException
    at java.util.Date.getMillisOf(Date.java:939)
    at java.util.Date.compareTo(Date.java:959)
    at FirstOccComparator.compare(FirstOccComparator.java:11)
    at FirstOccComparator.compare(FirstOccComparator.java:1)
    at java.util.Arrays.mergeSort(Arrays.java:1270)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.mergeSort(Arrays.java:1281)
    at java.util.Arrays.sort(Arrays.java:1210)
    at Planner.sort(Planner.java:62)
    at Test.main(Test.java:81)

测试@第81行:

p.sort( new FirstOccComparator() );

其中 p 是我制作的规划器类。

Planner.sort @ 第 62 行:

public void sort(Comparator<AbstractEvent> c) {
        Arrays.sort(schedule, c);
    } 

这是我的 FirstOccComparator 类: http://pastebin.com/4FZv4nXf (发布在pastebin上,因为它太宽并且很难在这里格式化)。 在此类中,如果事件多次重复发生,则 hasMoreOccurrences() 返回 true/false。 nextOccurrence() 返回下一次出现的日期。

我很确定我在这里缺少的东西非常简单,我对接口(interface)和比较器类仍然是新手。

感谢您的帮助!

最佳答案

您尚未共享的代码中有一个空 Date 对象...

顺便说一句,您可以大幅减小比较器的大小。本质上你正在做的就是说

if (x<0)
  result = -1;
else if (x==0)
  result = 0;
else if (x>0)
  result = 1;

为什么不直接说 result = x; 或者在您的特定示例中:

public int compare(AbstractEvent event1, AbstractEvent event2) {        
  int result = 0;       
  if (event1.hasMoreOccurrences() && event2.hasMoreOccurrences())
    result = event1.nextOccurrence().compareTo(event2.nextOccurrence());
  return result;
}

可以再次将其缩短为一行(如果这是您的风格):

public int compare(AbstractEvent event1, AbstractEvent event2) {        
  return (event1.hasMoreOccurrences() && event2.hasMoreOccurrences()) ? event1.nextOccurrence().compareTo(event2.nextOccurrence()) : 0;
}

关于java - 使用可比较的类进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134406/

相关文章:

python - 更改行顺序 Pandas 数据框

arrays - 如何在R中制作和排序元组数组

scala - 如何订购密封性状?

java - Android错误: Syntax error on token "}",删除此 token

java - 我想对两个不同的参数使用 Collections.sort() 两次

java - 带有图像列的 CellTable

使用许多属性进行 Java 对象比较

java - 使用可比较的类进行选择排序

java - 在 RabbitMQ 监听器中隐藏运行时异常

java - 在 Android 4.1 之前,方法 android.graphics.PorterDuffColorFilter --- 会错误地覆盖包