如何按多个条件对列表进行排序?

时间:2016-02-08 10:46:51

标签: java android

我有一个名称和id的ArrayList。

list.add(new Model2(null, "name1"));
list.add(new Model2("13", "name2"));
list.add(new Model2(null, "name1"));
list.add(new Model2("13", "name4"));
list.add(new Model2(null, "name1"));
list.add(new Model2("13", "name6"));

首先,如果id为null,则为

//the result should by like this:
    //1. null , name1
    //2. null , name1
    //3. null , name1
    //4. 13,name2
    //5. 13,name4
    //6. 13,name6

我知道如何对空值进行排序:

Collections.sort(list,sorting());   

    public static Comparator<? super Model2> sorting() {
        Comparator<Model2> sortedList = new Comparator<Model2>() {
            @Override
            public int compare(Model2 o1, Model2 o2) {
                return o1.getId() == null ? -1 : 0;
            }
        };
        return sortedList;
    }

但名称值怎么样?

2 个答案:

答案 0 :(得分:1)

首先,您必须弄清楚如何比较两个字符串。如果name2在name10之前,那么你需要从字符串中提取数字。看到这里如何做到这一点。 您可以通过多种不同的方式订购字符串,因此我只会描述这个想法。在比较方法中,您应该具有以下内容: public int compare(Model2 o1,Model2 o2){     if(o1.getId()== null)返回-1;     else if(o2.getId()== null)返回1;     else返回compareStrings(o1.getName(),o2.getName()); } 这里你需要考虑的是如何实现compareStrings方法。 附:你当然可以把它写成一个return语句,但我认为if语句更具可读性。

答案 1 :(得分:0)

    List<Model2> list = new ArrayList<Model2>();

    list.add(new Model2(null, "name1"));
    list.add(new Model2("13", "name2"));
    list.add(new Model2(null, "name3"));
    list.add(new Model2(null, "name2"));
    list.add(new Model2("13", "name6"));
    list.add(new Model2("14", "name7"));
    list.add(new Model2("13", "name4"));
    list.add(new Model2("14", "name3"));

    Collections.sort(list, new Comparator<Model2>() {

        @Override
        public int compare(Model2 o1, Model2 o2) {
            if (o1.getId() != null && o2.getId() != null) {
                if (o1.getId().equals(o2.getId())) {
                    return o1.getName().compareTo(o2.getName());
                }
                return o1.getId().compareTo(o2.getId());
            } else if (o1.getId() == null) {
                if (o2.getId() == null) {
                    return o1.getName().compareTo(o2.getName());
                }
                return -1;
            } else if (o2.getId() == null) {
                if (o1.getId() == null) {
                    return o1.getName().compareTo(o2.getName());
                }
            }
            return 0;
        }
    });

    for (Model2 model2 : list) {
        System.out.println(model2);
    }
}

给出

Model2 [id=null, name=name1]
Model2 [id=null, name=name2]
Model2 [id=null, name=name3]
Model2 [id=13, name=name2]
Model2 [id=13, name=name4]
Model2 [id=13, name=name6]
Model2 [id=14, name=name3]
Model2 [id=14, name=name7]