使用可比

时间:2018-01-04 16:52:11

标签: java android 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;
    }
}

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

这段代码片段(我认为它过去曾做过)可以解决这个问题,但我收到的错误信息是:“比较方法违反了它的一般合同”。

请帮忙!

1 个答案:

答案 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);
}