2013-04-15 47 views
3

我有這樣的:從對象的數組排序到ArrayList的<Object>

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); 

我停止使用數組,我現在使用的ArrayList。所以當我這樣做:

Collections.sort(MyItemArrayListOfObjects, ignoreLeadingThe); 

我什至不能弄清楚它現在排序的模式。我可以做一個乾淨的開關嗎? (這是完全有可能,我上面沒有提到的東西打破了這一點,如果這是正確的,那麼這就是我需要知道的)

注:本來與數組我只是想按字母順序排列的列表,並忽略領先的「The」。這是一個Android應用程序。每個List行項目數據都包裝在一個傳遞給ArrayAdapter的Object中。我只是想在該對象中使用一個ArrayList並按字母順序排列它。所以基本上,它是一個ArrayList,裏面有一些ArrayList。

+1

一般情況下,是的,你可以替換的Array.sort與Collections.sort陣列上的ArrayList該數組包含的相同對象。但是,您沒有顯示所有代碼,而且您的描述有點神祕。所以,請展示一個我們實際可以編譯和運行的小而完整的代碼示例。 – GreyBeardedGeek

+2

只要您使用相同的比較器,結果應該是相同的。看到這[Ideone](http://ideone.com/RkkBVI)。 – Perception

+0

@Perception謝謝。這就是我需要知道的。很努力 – KickingLettuce

回答

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); 
     } 
    }; 
1

你比較好看

的壞消息是,它不緩存生成的字符串。所以你的排序將創建o(N*log(N))模式的,匹配的和字符串的對象不談論其中的一些事實創建不是超快。

UPD

它建議使用@覆蓋你實現對接口和在子類中重寫方法。