使用仍处于最后位置的元素对列表进行排序

时间:2016-01-11 08:21:51

标签: java sorting arraylist

我有包含数据的对象列表。当我进行排序时,我希望单独的特定对象在列表中保持最后。 但它现在就开始了。

现:

已归档
应用
运行时等 嵌入式组件IDE -
调试,编译和构建工具
初始化/引导/设备驱动程序

必需

应用
运行时等 嵌入式组件IDE -
调试,编译和构建工具
初始化/启动/设备驱动程序
已存档

Collections.sort(existingList,new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1,Map<String, Object> o2) {
                                        String archiveCheck = (String)o1.get("name");
                                        if(archiveCheck.equalsIgnoreCase("Archived"))
                                            return -10000;
                                        else
                                            return ((String) o1.get("name")).compareTo((String) o2.get("name"));
                                    }
                                });

3 个答案:

答案 0 :(得分:3)

只要o1Archived

,只需返回正值
Collections.sort(existingList ,new Comparator<Map<String, Object>>() {
        public int compare(Map<String, Object> o1,Map<String, Object> o2) {
           String name1 = (String)o1.get("name");
           String name2 = (String)o2.get("name");

           if(name1.equalsIgnoreCase("Archived"))
             return 1;
           if(name2.equalsIgnoreCase("Archived"))
               return -1;
           return name1.compareTo(name2);
        }
    });

修改 我们必须检查比较器中两个参数的Archived值。更新了答案。因此,如果第二个参数匹配Archived,则返回负值

答案 1 :(得分:3)

一个简单的解决方案可能是从列表中删除您想要保留的元素(或者不首先添加它),使用默认比较器对列表进行排序,然后在末尾添加元素。

答案 2 :(得分:0)

最简单的事情,但不是像你可能需要的那样有效,我想到的是关于

的想法
  • 迭代original list - "Archived"复制到某些temp,全部 其他人则复制到newList ..
  • Sort newList,以及最后一次插入 "Archived" object(temp)