簡體   English   中英

在兩個字段上對自定義對象數組進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM