我无法使用我自己的 Comparator 实现按 Collections.sort() 对我的集合进行排序。抛出的异常是-->“IllegalArgumentException:比较方法违反了它的一般合同!在我的 OrdersBean 中,我已经覆盖了 hashCode,如下所示:
@Override
public int hashCode() {
return this.getServiceOrderName().toUpperCase().hashCode();
}
我没有覆盖 equals() 并且仅使用 Object 类的(我觉得应该不是问题)。
我已经这样实现了比较器:
public static final Comparator<OrdersBean> ordersComparator=new Comparator<OrdersBean>() {
@Override
public int compare(OrdersBean first, OrdersBean second)
{
if(Double.parseDouble(first.getPriority())<Double.parseDouble(second.getPriority()))
return -1;
else
if(Double.parseDouble(first.getPriority())>Double.parseDouble(second.getPriority()))
return +1;
else
{
if((first.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD")) &&
(second.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD")))
return -1;
if((first.getPlatformType().equalsIgnoreCase("T1 Augment")) &&
(second.getPlatformType().equalsIgnoreCase("T1 Augment")))
return -1;
if(first.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return -1;
else
if(second.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return +1;
else
if(first.getPlatformType().equalsIgnoreCase("T1 Augment"))
return -1;
else
if(second.getPlatformType().equalsIgnoreCase("T1 Augment"))
return +1;
else
return -1;
}
}
};
请建议我,我哪里错了???
我现在已将代码更改如下,它对于 sort() 方法运行良好,但它现在最终导致稍后的代码中出现错误,该比较器被传递给 Tree-Set,其中不允许重复,因此所有在比较器返回 0 的类似平台类型的情况下,这些订单不会添加到此 sortedSet;(因为不允许重复):
public static final Comparator<OrdersBean> ordersComparator=new Comparator<OrdersBean>() {
@Override
public int compare(OrdersBean first, OrdersBean second)
{
int diffProrties=(int)(Double.parseDouble(first.getPriority())-Double.parseDouble(second.getPriority()));
if(diffProrties != 0)
return diffProrties;
if(first.getPlatformType().equalsIgnoreCase(second.getPlatformType()))
return 0;
if(first.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return -1;
if(second.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return +1;
if(first.getPlatformType().equalsIgnoreCase("T1 Augment"))
return -1;
if(second.getPlatformType().equalsIgnoreCase("T1 Augment"))
return +1;
return 0;
}
};