2013-10-15 14 views
7

Ho una lista di array con i seguenti valoriArray Elenco dei String Ordinamento Metodo

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

quando ho usato

Collections.sort(ArrayList) 

sto ottenendo il seguente risultato

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

secondo il documento Java i risultati sopra riportati sono corretti, ma le mie aspettative sono (ordinamento indipendentemente dal caso (maiuscolo/minuscolo)

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

fornire un aiuto come farà il smistamento a prescindere dal caso in java, c'è qualche altro metodo disponibile

Nota: farò un test automatizzati per il controllo l'ordinamento nella tabella Web

riguarda

Prabu

+0

un'occhiata a java [Comparatore] (http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html) –

+0

Hai provato questo: http://stackoverflow.com/questions/7469643/how-to-sort-alphabetically-while-ignoring-case-sensitive – realUser404

+0

Basta aggiungere un comparatore a Collections.sort() che ignorerà il caso. Puoi scrivere il tuo, ma ce n'è uno già definito nella classe String: String.CASE_INSENSITIVE_ORDER. Quindi la chiamata di tipo sarà "Collections.sort (your_List , String.CASE_INSENSITIVE_ORDER)". La soluzione completa è descritta da Ulaga di seguito. – mins

risposta

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

poi

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

Non sei sicuro del motivo per cui dovresti fare Comparator Comparator quando li inserisci in modo esplicito subito dopo aver inserito il metodo. –

0

La risposta è semplice: le lettere grandi hanno un numero inferiore in ASCII. Quindi il confronto di default funziona bene.

2

Si può fare con comparatore personalizzato.

Prova questa:

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

Si avrà bisogno di passare Comparator esempio nel Collections.sort() metodo che confronta String oggetti caso ignorando.

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

È possibile utilizzare il proprio confronto come questo per ordinare a prescindere dal caso (maiuscole/minuscole)

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

Questo farà,

Collections.sort(yourList, String.CASE_INSENSITIVE_ORDER); 

questo è che ho provato ,

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

il seguente risultato,

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

Collections.sort (before_fn, String.CASE_INSENSITIVE_ORDER); \t \t per (Temp stringa: before_fn) { \t \t \t System.out.println ("Ordine crescente" + temp); \t \t} funziona correttamente, fammi sapere l'ordine di inversione per quello stesso
quando ho provato Collections.sort (before_fn, Collections.reverseOrder()); il suo funzionamento mi ha richiesto indipendentemente dal caso – Prabu