我对这段代码有一点问题:
@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的对象首先显示分配给我的对象,然后分配给其他提供者的对象。
这段代码片段(我认为它过去曾做过)可以解决这个问题,但我收到的错误信息是:“比较方法违反了它的一般合同”。
请帮忙!
违反合同通常意味着比较器在比较对象时没有提供正确或一致的值。
例如 :
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);
}