【问题标题】:How to sort categories Arraylist? [duplicate]如何对类别Arraylist进行排序? [复制]
【发布时间】:2016-07-12 23:43:58
【问题描述】:

我有传递给标签的类别 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。如何按名称对类别进行排序?

【问题讨论】:

  • 你能发布你的 'Category' 类,它实现了 Comparator 吗?
  • Categories 类不同,我问的 Category 也不同,看看你用过 List 而不是 List ...!!
  • 您想按类别名称对 List 进行排序吗?
  • @vishalgajera 是的。
  • 查看我的答案并按照它进行操作,将起作用

标签: java list sorting arraylist collections


【解决方案1】:

您必须在您的Category 类中实现Comparable 接口并覆盖compareTo() 方法。

【讨论】:

    【解决方案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());
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        同样定义一个类,

        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
        

        【讨论】:

        • 上面写着cannot resolve symbol sort
        • 将我写的内容准确地写到答案中,因为“排序”是集合的静态方法。所以请正确检查。如果你还没有导入任何东西,那么像我写的那样写完全限定的名称,java.util.Collections.sort...
        • 谢谢。第一段代码有语法错误。
        【解决方案5】:
            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;
                    }
                }
            }
        

        【讨论】:

        • 我将代码粘贴到类别类中,但它没有按名称排序。我也将它粘贴在类别类上方而不使用public,也没有工作。
        • 它是一个单独的类,您不必将其放入类别类中。如果你想要这样的东西,请实现 Comparable 接口。
        猜你喜欢
        • 2012-10-01
        • 1970-01-01
        • 2013-02-08
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 2012-08-05
        • 1970-01-01
        相关资源
        最近更新 更多