0
我試圖理清我與它Arrayadapter輔助排序的排序方法上ArrayAdapter
@Override
public void sort(@NonNull Comparator<? super Task> comparator) {
super.sort(comparator);
}
兩次。
我用兩個比較
private static final Comparator TASKCOMPARATOR_TITLE = new Comparator<Task>() {
@Override
public int compare(Task a, Task b) {
return a.getTitle().compareToIgnoreCase(b.getTitle());
}
};
private static final Comparator TASKHOLDERCOMPARATOR_DUEDATE = new Comparator<ViewHolder>() {
@Override
public int compare(ViewHolder a, ViewHolder b) {
return a.getTask().getDueTime().compareTo(b.getTask().getDueTime());
}
};
這樣
taskAdapter.sort(Util.getTASKCOMPARATOR_TITLE());
taskAdapter.sort(Util.getTASKCOMPARATOR_DUEDATE());
由標題,然後通過日期希望輔助排序一個ArrayAdapter。排序法一個ArrayAdapter的內部使用
public void sort(Comparator<? super T> comparator) {
synchronized (mLock) {
if (mOriginalValues != null) {
Collections.sort(mOriginalValues, comparator);
} else {
Collections.sort(mObjects, comparator);
}
}
if (mNotifyOnChange) notifyDataSetChanged();
}
我讀過,那Collections.sort()是使用穩定的算法,因此我不知道爲什麼我的ArrayAdapter的名單只是被排序我調用的最後一個比較器。
有誰能告訴我我犯了什麼錯誤,爲什麼第一個sort() - 調用被第二個忽略?
編輯
private static final Comparator TASKCOMPARATOR = new Comparator<Task>() {
@Override
public int compare(Task a, Task b) {
int timeCompareResult = a.getDueTime().compareTo(b.getDueTime());
if (timeCompareResult == 0) {
return a.getTitle().compareToIgnoreCase(b.getTitle());
} else {
return timeCompareResult;
}
}
};
這工作。我不知道這是否是唯一/最好的方法。
只需使用一個比較和排序由兩個參數存在。如果標題相同,則按日期排序。這是基本的。你也可以抽象它,並寫通用比較器,接受兩個內部比較器。 –