我如何对对象的compareTo方法逻辑上不应该与equals方法一致的Java对象进行排序?

时间:2015-08-11 16:14:34

标签: java sorting comparator comparable treeset

我有以下课程:

IntArray&

此类在逻辑上封装了事件及其优先级。我正在编写一个框架,将 n 这些事件的数量作为输入,它将触发 n 中的顶部 k 事件;我只希望获得优先级最高的 k 事件。

我想通过让EventPriority类实现 Comparable 来实现这一点:

public class EventPriority {
    Event myEvent;
    Double priority;
}

并使用 BoundedTreeSet ,其最大尺寸为 k 。如果插入项目会导致集合的大小超出最大大小,则会从集合中删除最后一个元素。

但是,如果事件具有相同的事件,则EventPriority类的两个对象在逻辑上是相同的。所以:

@Override
public int compareTo(EventPriority other) {
    return other.priority.compareTo(priority);
}

在这种情况下, firstPriority 在逻辑上与 secondPriority 相同,但它们只有不同的优先级值。

从我在线阅读的所有内容来看, compareTo()方法与 equals()不一致并不是一个好主意方法

那么在这种情况下我该怎么办?

1 个答案:

答案 0 :(得分:0)

假设您有priority的getter,Comparator.comparing()使创建自定义比较器变得简单:

Comparator<EventPriority> comparator = Comparator.comparing(EventPriority::getPriority);