2013-01-25 24 views
16

Ho un programma che consente all'utente di eliminare un elemento da un array e sto cercando di ordinarli in ordine alfabetico utilizzando compareTo(); attraverso un ciclo for. Tuttavia, i valori nulli mi stanno dando problemi. Per esempio un array con valori nulli:Ordinamento array con valori nulli

String[] myArray = {"Apple", "Banana", null, "Durian", null, null, "Grapes"}; 

Quando Java di loro è il confronto e legge un valore nullo, sarebbe darmi una NullPointerException.

C'è un modo per ordinare questo array con valori null sul retro? Per esempio:

{"Apple", "Banana", "Durian", "Grapes", null, null, null} 

So che l'utilizzo di vettori in grado di risolvere il problema, ma io sono solo curioso di sapere se c'è un modo che io posso solo farlo senza cambiare il mio allineamento ai vettori.

+4

Con Guava, questo è semplice: 'Arrays.sort (array, Ordering.natural(). NullsLast())' –

risposta

7

lascia la propria Comparator che accetta valori nulli, e passare tale comparatore metodo Arrays.sort()

23

provare questo

Arrays.sort(myArray, new Comparator<String>() { 
     @Override 
     public int compare(String o1, String o2) { 
      if (o1 == null && o2 == null) { 
       return 0; 
      } 
      if (o1 == null) { 
       return 1; 
      } 
      if (o2 == null) { 
       return -1; 
      } 
      return o1.compareTo(o2); 
     }}); 

produce nell'ordine richiesto