在两个字段上排序自定义对象数组

时间:2012-07-23 08:44:36

标签: android arrays sorting custom-object

我正在两个字段上排序一组自定义对象(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个项目。

1 个答案:

答案 0 :(得分:1)

您的ListData对象应该实现Comparable而不是Comparator接口。

EDIT:

为清楚起见,您可以按arrayArray.sort()进行排序。要进行自定义排序,可以在Array.sort()中指定比较器,如果不这样做,则数组将按自然顺序排序,您可以通过实现Comparable接口来定义。因此,您有两种选择如何自定义排序:

  • 使用自定义比较器并在Array.sort()
  • 中指定
  • 通过实施商品的Comparable界面

我建议你去实施Comparable。您可以通过不创建新的比较器对象来节省内存,如果您要比较不属于您的不同类型的对象,Comparator非常有用。