Android自定义排序使用可比

问题描述 投票:0回答:1

我对这段代码有一点问题:

@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的对象首先显示分配给我的对象,然后分配给其他提供者的对象。

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

请帮忙!

java android comparable
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.