2013-10-15 22 views
7

Ich habe ein Array-Liste mit Folgende WerteArray Liste der String Sortiermethode

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

wenn ich verwendet

Collections.sort(ArrayList) 

Ich bin das folgende Ergebnis erhalten

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

per Das Java-Dokument die obigen Ergebnisse sind korrekt, aber meine Erwartung ist (Sortierung unabhängig von Groß-/Kleinschreibung)

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

eine Hilfe zur Verfügung stellen, wie die Sortierung unabhängig von Fall in Java tun, ist es eine andere Methode zur Verfügung

Hinweis: i wird für die Überprüfung der Sortierreihenfolge in der Web-Tabelle einen Automate Test machen

Grüße

prabu

+0

einen Blick auf Java [Vergleicher] nehmen (http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html) –

+0

Haben Sie versucht, diese: http://stackoverflow.com/questions/7469643/how-to-sort-alphabetically-while-ignoring-case-sensitive – realUser404

+0

Fügen Sie Collections.sort() einfach einen Komparator hinzu, der den Fall ignoriert. Sie könnten Ihre eigenen schreiben, aber es ist bereits eine in der String-Klasse definiert: String.CASE_INSENSITIVE_ORDER. Sie sortieren also "Collections.sort (your_List , String.CASE_INSENSITIVE_ORDER)". Die vollständige Lösung wird von Ulaga unten beschrieben. – mins

Antwort

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

dann

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

Nicht sicher, warum Sie Comparator anstelle von Comparator tun würden, wenn Sie sie direkt nach Eingabe der Methode explizit eingeben. –

0

Antwort ist einfach - große Buchstaben haben niedrigere Nummer in ASCII. Der Standardvergleich funktioniert also gut.

2

Sie können mit benutzerdefinierten Vergleicher tun.

Versuchen Sie folgendes:

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

Sie Comparator Instanz in Collections.sort() Methode übergeben werden müssen, die String Objekte ignorieren Fall vergleicht.

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

Sie können Ihre eigenen Komparator wie folgt verwenden, unabhängig von Fall zu sortieren (Groß-/Kleinschreibung)

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

Dies tun werde,

Collections.sort(yourList, String.CASE_INSENSITIVE_ORDER); 

dies ich versucht habe ,

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

der folgende Ausgang bekam ich,

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

Collections.sort (before_fn, String.CASE_INSENSITIVE_ORDER); \t \t für (String temp: before_fn) { \t \t \t System.out.println ("aufsteigende Reihenfolge" + Temp); \t \t} es funktioniert ordnungsgemäß, lassen Sie mich die Umkehrreihenfolge für das gleiche
wissen, wenn ich versuchte Collections.sort (before_fn, Collections.reverseOrder()); Seine Arbeit wurde unabhängig vom Einzelfall gefordert – Prabu