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);
}
这段代码有点问题:
@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);
}