2013-10-15 62 views
7

我有一個數組列表與下面的值數組列表

ArrayList [Admin,Readonly,CSR,adminuser,user,customer] 

當我用

Collections.sort(ArrayList) 

我得到以下結果

[Admin,CSR,Readonly,adminuser,customer,user] 

按Java doc上面的結果是正確的,但是我的期望是(排序不分大小寫)(大小寫)

[Admin,adminuser,CSR,customer,Readonly,user] 

提供幫助,我會做在Java中的排序情況不論,是否有其他可用方法

注:我會做一個自動化測試在Web表檢查排序順序

問候

prabu

+0

看看java的[比較](http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html) –

+0

你試過這樣: http://stackoverflow.com/questions/7469643/how-to-sort-alphabetically-while-ignoring-case-sensitive – realUser404

+0

只需將一個比較器添加到Collections.sort(),它將忽略大小寫。你可以編寫你自己的,但是有一個已經在String類中定義了:String.CASE_INSENSITIVE_ORDER。所以你排序調用將是「Collections.sort(your_List ,String.CASE_INSENSITIVE_ORDER)」。下面的Ulaga描述了完整的解決方案。 – mins

回答

1
public class SortIgnoreCase implements Comparator<Object> { 
    public int compare(Object o1, Object o2) { 
     String s1 = (String) o1; 
     String s2 = (String) o2; 
     return s1.toLowerCase().compareTo(s2.toLowerCase()); 
    } 
} 

然後

Collections.sort(ArrayList, new SortIgnoreCase()); 
+0

不確定當您在輸入方法後立即明確指定它們時,爲什麼要使用比較器而不是比較器。 –

0

答案很簡單 - 大字母在ASCII有較低的數字。所以默認比較工作正常。

2

您可以使用自定義比較器。

試試這個:

// list containing String objects 
    List<String> list = new ArrayList<>(); 

    // call sort() with list and Comparator which 
    // compares String objects ignoring case 
    Collections.sort(list, new Comparator<String>(){ 
     @Override 
     public int compare(String o1, String o2) { 
      return o1.compareToIgnoreCase(o2); 
     } 
    }); 

您將需要通過Comparator比如在Collections.sort()方法,比較String對象不區分大小寫。

1
Collections.sort(ArrayList, new Comparator<String>() { 
     @Override 
     public int compare(String s1, String s2) { 
      return s1.toLowerCase().compareTo(s2.toLowerCase()); 
     } 
    }); 
4

您可以使用自己比較喜歡這種排序情況無關(大/小寫)

Collections.sort(list, new Comparator<String>() { 
     @Override 
     public int compare(String s1, String s2) 
     {  
      return s1.compareToIgnoreCase(s2); 
     } 
}); 
6

這會做,

Collections.sort(yourList, String.CASE_INSENSITIVE_ORDER); 

這是我嘗試,

ArrayList<String> myList=new ArrayList<String>(); 
Collections.addAll(myList,"Admin","Readonly","CSR","adminuser","user","customer"); 
System.out.println(myList); 
Collections.sort(myList, String.CASE_INSENSITIVE_ORDER); 
System.out.println(myList); 

我得到了下面的輸出,

[Admin, Readonly, CSR, adminuser, user, customer] 
[Admin, adminuser, CSR, customer, Readonly, user] 
+0

Collections.sort(before_fn,String.CASE_INSENSITIVE_ORDER); (字符串temp:before_fn){ \t \t \t System.out.println(「Ascending Order」+ temp); \t \t}它的工作正常,當我試着Collections.sort(before_fn,Collections.reverseOrder())時,讓我知道相同的的顛倒順序;無論案件如何,我都需要工作 – Prabu