Android 使用可比较的自定义排序

Android custom sorting using comparable

这段代码有点问题:

@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;
    }
}

我创建了实现 Comparable 接口的 EventResponse class,o.myProviderId 是当前登录用户(进入应用程序)的 ID,o.providerId 是用户的 ID分配给特定对象 (EventResponse)。 我需要实现的是,如果有两个具有相同 startTime 的对象首先显示分配给我的对象,然后显示分配给其他一些对象的对象 provider/s.

这段代码片段(我认为过去确实如此)可以解决问题,但我收到错误消息:"Comparison method violates its general contract".

请帮忙!

违反约定通常意味着比较器在比较对象时没有提供正确或一致的值。

例如:

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 时会发生什么。在这两种情况下,您都将 return -1 不是吗?

相反,为什么不直接 return 从 compareTo 得到 return 的东西?

if (compare1 == 0 && o.myProviderId != null && o.providerId != null) {
    return o.providerId.compareTo(o.myProviderId);
}