我对这段代码有点问题:
@Override
public int compareTo(EventResponse o) {
int compare1 = startTime.compareTo(o.startTime);
if (compare1 == 0 && o.myProviderId != null && o.providerId != null) {
return o.providerId.compareTo(o.myProviderId) != 0 ? -1 : 0;
} else {
return compare1;
}
}
我创建的EventResponse类实现了Comparable接口,o.myProviderId是当前登录用户的ID(进入应用程序),o.providerId是分配给特定对象的用户ID(EventResponse)。 我需要实现的是,如果有两个具有相同startTime的对象,则首先显示分配给我的对象,然后分配给其他提供者的对象。
这段代码片段(我认为它过去曾做过)可以解决这个问题,但我收到的错误信息是:“比较方法违反了它的一般合同”。
请帮忙!
答案 0 :(得分:0)
违反合同通常意味着比较器在比较对象时没有提供正确或一致的值。
例如:
if (compare1 == 0 && o.myProviderId != null && o.providerId != null) {
return o.providerId.compareTo(o.myProviderId) != 0 ? -1 : 0;
}
那么,当o.providerId.compareTo(o.myProviderId)
为您提供1
或-1
时会发生什么。在这两种情况下,您都将返回-1
不是吗?
相反,为什么不简单地返回从compareTo
返回的内容?
if (compare1 == 0 && o.myProviderId != null && o.providerId != null) {
return o.providerId.compareTo(o.myProviderId);
}