我在兩個字段上排序自定義對象數組(ListData[]
)。我希望它按照主題排序,並按名稱排序。我以爲我在自定義對象類中做了一個很好的比較器,並且我可以使用Arrays.sort(ld)
來使我的代碼工作並對我的數組進行排序。但很顯然,即時通訊做錯了什麼......在兩個字段上排序自定義對象數組
我的自定義對象:
public class ListData implements Comparable<ListData>{
public int venueID;
public String name;
public String photoUrl;
public String tip;
public String theme;
@Override
public int compareTo(ListData ld0) {
return this.venueID- ld0.venueID;
}
public static Comparator<ListData> ListDataThemeAndNameComparator = new Comparator<ListData>() {
@Override
public int compare(ListData ld1, ListData ld2) {
String compareTheme1 = ld1.theme.toUpperCase();
String compareTheme2= ld2.theme.toUpperCase();
String compareName1 = ld1.name.toUpperCase();
String compareName2= ld2.name.toUpperCase();
//ascending
int comp = compareTheme1.compareTo(compareTheme2); // comp themes
if(comp==0){ // same theme
comp= compareName1.compareTo(compareName2); // compare names
}
return comp;
}
};
}
在我的主要活動,我有:
ListData ld[]= new ListData[jsonResponse.size()];
(some code filling my ListData array)
Arrays.sort(ld, ListData.ListDataThemeAndNameComparator); // compare by theme and then by name
有誰知道我做錯了嗎?
我編輯了我的代碼但它仍然失敗,現在在compareTheme1 = ld1.theme.toUpperCase();
上出現nullpointerexception。但我相信我的數組不是空的,我在排序它之前記錄了它的行,並且它充滿了大約500個項目。
我編輯了我的代碼,現在我有其他錯誤(在我的問題中解釋)。感謝您的貢獻,但只有將比較變成可比較的(以及進口等)並不能解決我的問題。 – Jasper 2012-07-23 10:04:33
你的數組可能不是空的,但似乎你的一些元素沒有主題字段初始化。檢查主題和名稱爲null。 – biegleux 2012-07-23 10:08:49
你說得對。我有一些空的字段在數組的末尾,因爲我宣佈了一個大數組。我將其更改爲arraylist,但是當我使用正確的數字它的工作。 – Jasper 2012-07-23 10:22:29