从排序对象数组到ArrayList <object> </object>

时间:2013-04-15 00:38:09

标签: java android arrays arraylist

我有这个:

Comparator<Item> ignoreLeadingThe = new Comparator<Item>() {
                public int compare(Item a, Item b) {
                    String newA = a.name.replaceAll("(?i)^the\\s+", "");
                    String newB = b.name.replaceAll("(?i)^the\\s+", "");
                    return newA.compareToIgnoreCase(newB);
                }
            };

Array.sort(MyItemArrayOfObjects, ignoreLeadingThe);

我停止使用Arrays,现在正在使用ArrayList。所以当我这样做时:

Collections.sort(MyItemArrayListOfObjects, ignoreLeadingThe);

我甚至无法弄清楚它现在正在排序的模式。我可以像这样做一个干净的开关吗? (我完全有可能用上面没有提到的东西打破这个,如果这是正确的话,那就是我需要知道的全部)

注意:最初,使用数组我只是试图按字母顺序排列并忽略前导“The”。这是一个Android应用程序。每个List行的Item数据都包装在一个Object中,我将它传递给ArrayAdapter。我只是想在该对象中取一个ArrayList并按字母顺序排列。基本上,它是一个ArrayList,里面有一些ArrayList。

2 个答案:

答案 0 :(得分:1)

您的比较器看起来不错

坏消息是它不会缓存生成的字符串。因此,您的排序将创建o(N*log(N))模式,匹配器和字符串的对象,而不是谈论创建其中一些不是超快的事实。

<强> UPD

建议在你为接口实现的方法和子类中的覆盖时使用@Override。

答案 1 :(得分:1)

它对Collections.sort非常有效,我只建议改进比较器

    Comparator<Item> ignoreLeadingThe = new Comparator<Item>() {
        Pattern pattern = Pattern.compile("(?i)^the\\s+");
        public int compare(Item a, Item b) {
            String newA = pattern.matcher(a.name).replaceAll("");
            String newB = pattern.matcher(b.name).replaceAll("");
            return newA.compareToIgnoreCase(newB);
        }
    };