我正在使用自定义比较器对列表进行排序。
Collections.sort(list, new DispositionShiftSortComparator(shiftSortComparatorIndex));
在比较功能中,如果两个objetc中的任何一个具有cretain值,那么我不希望比较器对该调用中的列表进行排序。
功能如下:
boolean taskStatusObj1 = false, taskStatusObj2 = false;
long time1 = 0, time2 = 0;
for (int i = 0; i < o1.getValue().getTaskCount(); i++) {
if (o1.getValue().getTask(i).getObject() instanceof TaskObject) {
TaskObject obj1 = (TaskObject)o1.getValue().getTask(i).getObject();
if (obj1 != dndTask) {
taskStatusObj1 = ((TaskObject)o1.getValue().getTask(i).getObject()).getSafeDataItem(DataKey.DK_TASK_STATE).stringValue() != null ? true : false;
}
}
}
for (int i = 0; i < o2.getValue().getTaskCount(); i++) {
if (o2.getValue().getTask(i).getObject() instanceof TaskObject) {
TaskObject obj2 = (TaskObject)o2.getValue().getTask(i).getObject();
if (obj2 != dndTask) {
taskStatusObj2 = ((TaskObject)o2.getValue().getTask(i).getObject()).getSafeDataItem(DataKey.DK_TASK_STATE).stringValue() != null ? true : false;
}
}
}
if (taskStatusObj1) {
new Date(o1.getValue().getTask(o1.getValue().getTaskCount() - 1).getEndTime());
time1 = o1.getValue().getTask(o1.getValue().getTaskCount() - 1).getEndTime();
} else {
time1 = 0;
}
if (taskStatusObj2) {
new Date(o2.getValue().getTask(o2.getValue().getTaskCount() - 1).getEndTime());
time2 = o2.getValue().getTask(o2.getValue().getTaskCount() - 1).getEndTime();
} else {
time2 = 0;
}
if (time1 != 0 && time2 != 0) {
return -(int) (time1 - time2);
} else if (time1 != 0 && time2 == 0) {
return (int) time1;
} else if (time1 == 0 && time2 != 0) {
return (int) -time2;
}
return 0;
}
在我检查对象不是dnd任务类型的函数中,不要进行排序。在我的方法中,任何人都可以帮助我。
答案 0 :(得分:0)
我不知道细节,所以我要解决这个问题:
Comparator
,如果任何对象包含该特定值,则返回0
。public class DispositionShiftSortComparator<DispositionShif> {
@Override
public int compare(DispositionShift shift1, DispositionShift shift2) {
if ((shift1 != null && containsCertainValue(shift1)) || (shift != null) && containsCertainValue(shift2)) {
return 0;
}
// ... do the rest as you did
}
}
Collections.sort()
保证稳定。这很简单:
public static void sort(列表列表, 比较器c)根据指定比较器引起的顺序对指定列表进行排序。所有 列表中的元素必须使用指定的内容进行相互比较 比较器(即c.compare(e1,e2)不得抛出一个 列表中任何元素e1和e2的ClassCastException。这种 保证稳定:相同的元素不会被重新排序为a 结果的结果。