Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema Collections.sort()

    Salve. Ho notato che il metodo sort() di Collections per ordinare List, fa la differenza tra caratteri maiuscoli e minuscoli. Ad esempio, se un mio ArrayList contenesse 3 stringhe: Anatra, barca, Zorro, il metodo sort di Collections le ordinerebbe in questo modo: Anatra, Zorro, barca... perchè "barca" inizia con una lettera minuscola. Se invece di "barca", avrei avuto "Barca", la stringa si sarebbe posizionata giustamente tra Anatra e Zorro.
    Ma come posso fare per evitare la distinzione tra maiuscole e minuscole, in modo da inserire "barca" comunque tra Anatra e Zorro?

  2. #2

    Re: Problema Collections.sort()

    Originariamente inviato da Dreamer89
    Salve. Ho notato che il metodo sort() di Collections per ordinare List, fa la differenza tra caratteri maiuscoli e minuscoli. Ad esempio, se un mio ArrayList contenesse 3 stringhe: Anatra, barca, Zorro, il metodo sort di Collections le ordinerebbe in questo modo: Anatra, Zorro, barca... perchè "barca" inizia con una lettera minuscola. Se invece di "barca", avrei avuto "Barca", la stringa si sarebbe posizionata giustamente tra Anatra e Zorro.
    Ma come posso fare per evitare la distinzione tra maiuscole e minuscole, in modo da inserire "barca" comunque tra Anatra e Zorro?
    sort() ordina degli oggeti Comparable come nel tuo caso delle String...dovresti creati un tuo Comparator e fare l'overload del metodo compereTo()

    Vedi qui:
    http://java.sun.com/j2se/1.5.0/docs/...omparator.html
    http://java.sun.com/j2se/1.5.0/docs/...il.Comparator)

    In definitiva ad occhio:

    Codice PHP:
    Collections.sort(tuaCollezzione, new Comparator(){
                      
    int compare(String o1String o2){
                           
    // qua srivi il tuo metodo per confrontare le due stringhe....
                      
    }
    }); 
    Spero di non aver detto delle fesserie....

  3. #3
    Non mi è tanto chiaro come agire :P
    Allora, creo questo Comparator ok, ma non ho ben capito cosa metterci dentro...

  4. #4
    Originariamente inviato da Dreamer89
    Non mi è tanto chiaro come agire :P
    Allora, creo questo Comparator ok, ma non ho ben capito cosa metterci dentro...
    ok ti faccio un esempio di Comparator tra interi (poichè più semplice):

    Codice PHP:
    public class mioComparatore implements Comparator{

           
    /* ritorna 0 se o1 = o2 , -1 se o1 è più piccolo di o2, 1 se o1 è più grande di o2 */
           
    int compare(int o1int o2){
              if(
    o1 == o2)
                 return 
    0;
              else if(
    o1 o2)
                return -
    1;
              else return 
    1;
          }


    In questo modo il metodo sort() è in grado di confrontare due oggetti (in questo caso semplici interi) in base alla tua politica "personalizzata" e quindi di ordinarli...ovviamente farà automaticamente N suddetti confronti dipendentemente dalla dimensione della tua collezzione.

  5. #5
    Il metodo compare di Comparator non mi è mai stato chiaro come gestirlo... c'è qualcuno che potrebbe gentilmente crearmi il metodo adatto che mi serve? ^^

  6. #6
    Ho provato così, ma mi da un errore... mi dice che la classe non è abstract e quindi non fa l'override del metodo compare:

    codice:
    	private class SortStrings implements Comparator
    	{
    		int compare (String ob1, String ob2)
    		{
    			if (ob1.compareTo (ob2) == 0)
    				return 0;
    			if (ob1.compareTo (ob2) < 0)
    				return -1;
    			return 1;
    		}
    	}

  7. #7
    Originariamente inviato da Dreamer89
    Ho provato così, ma mi da un errore... mi dice che la classe non è abstract e quindi non fa l'override del metodo compare:

    codice:
    	private class SortStrings implements Comparator
    	{
    		int compare (String ob1, String ob2)
    		{
    			if (ob1.compareTo (ob2) == 0)
    				return 0;
    			if (ob1.compareTo (ob2) < 0)
    				return -1;
    			return 1;
    		}
    	}
    Scusate se riesumo questo vecchio thread, ma ci sono finto con google, sembra sia l'unico che tratti l'argomento in italiano...

    A me il sorgente qui sopra nopn si compila, ma questa variante si':


    codice:
    	 class SortStrings implements Comparator
    	{
    		public int compare (Object ob1, Object ob2)
    		{
                         String string1 = (String)ob1.toString();
                         String string2 = (String)ob2.toString();
                         if (string1.compareTo (string2) == 0)
    				return 0;
    			if (string1.compareTo (string2) < 0)
    				return -1;
                            return 1;                    
    		}
    	}
    ...pero' devo ancora capire come fare ad accedere a questo comparatore dall'interno del mio sorgente, visto che cosi' non è visibile, e se metto "public" davanti a "class" mi dice che devo mettere tutto in un altro file... che pero' poi non saprei come compilare usando netbeans!

    Idee?
    -- JumpJack --

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.