如何对Arraylist类别进行排序?

时间:2016-03-25 08:02:50

标签: java list sorting arraylist collections

我有类别ArrayList,它传递给标签。标签获取类别名称并进行设置。

private List<Category> mCategories;
private LayoutInflater mInflater;

public LeftMenuAdapter(Context context, List<Category> categories) {
    mCategories = categories;
    mInflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
Category category = mCategories.get(position - 3);
holder.label.setText(category.getName());

类别类:

public class Category implements Parcelable {
    private List<String> images;
    private String name;

    public List<String> getImages() {
        return this.images;
    }

    public void setImages(List<String> images) {
        this.images = images;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    protected Category(Parcel in) {
        if (in.readByte() == 0x01) {
        images = new ArrayList<String>();
            in.readList(images, String.class.getClassLoader());
        } else {
            images = null;
        }
        name = in.readString();
    }

    @Override
    public int describeContents() {
        return 2;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if (images == null) {
            dest.writeByte((byte) (0x00));
        } else {
            dest.writeByte((byte) (0x01));
            dest.writeList(images);
        }
        dest.writeString(name);
    }

    public static final Parcelable.Creator<Category> CREATOR = new Parcelable.Creator<Category>() {
        @Override
        public Category createFromParcel(Parcel in) {
            return new Category(in);
        }

        @Override
        public Category[] newArray(int size) {
            return new Category[size];
        }
    };
}

我使用了比较器,但它说Cannot resolve symbol sort。如何按名称对类别进行排序?

5 个答案:

答案 0 :(得分:3)

同样定义一个类,

class SortByNameCategory implements Comparator<Category>{

    @Override
    public int compare(Category c1, Category c2) {
        return (c1.getName() != null ? c1.getName().compareTo(c2.getName())).compareTo(c2.getName() : 0);
    }

}

......在其他地方..

List<Category> listofCategory = new ArrayList<Category>();
// populate this listofCategory as per your wish...

    java.util.Collections.sort(listofCategory , new SortByNameCategory()); // this will sort your listofCategory by Category's Name base

答案 1 :(得分:3)

    public class CategoryComparator implements Comparator<Category> {
        @Override
        public int compare(Category o1, Category o2) {
            if(o1.getName()!=null && o2.getName()!=null){
                return o1.getName().compareToIgnoreCase(o2.getName());
            }else{
                return 0;
            }
        }
    }

答案 2 :(得分:2)

您必须在Comparable课程中实施Category界面并覆盖compareTo()方法。

答案 3 :(得分:2)

您需要创建自定义比较器

public class CustomComparator implements Comparator<MyObject> {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getStartDate().compareTo(o2.getStartDate());
    }
}

并比较arrayList中的对象:

Collections.sort(arrayList, new CustomComparator());

答案 4 :(得分:1)

所以你的问题就是排序并不知道如何处理类。你必须创建类别,但你必须编写一个方法来告诉究竟要排序的内容。 如果您的类包含字符串,则使用比较器并根据起始字符或您喜欢的任何类型对其进行排序 与int和一切相似。 目前,如果您在列表中调用sort,则无法知道如何处理您的课程。