![](/img/trans.png)
[英]sorting and filtering ListView with custom array adapter with two TextView?
[英]sorting custom object array on two fields
我正在對兩個字段上的自定義對象數組( 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個項目。
您的ListData
對象應該實現Comparable
not Comparator
接口。
EDIT:
為了清楚Array.sort()
,您可以按Array.sort()
對array
進行排序。 要進行自定義排序,可以在Array.sort()
指定比較器,如果不這樣做,則將按照自然順序對數組進行排序,可以通過實現Comparable
接口來定義數組。 因此,您有兩種方法可以自定義排序:
Array.sort()
指定它 Comparable
接口 我建議您繼續實施Comparable
。 通過不創建新的比較器對象來節省內存,如果比較的不是您的情況,則Comparator
器很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.