Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    Come si usa il metodo comparator();

    Ciao a tutti, qualcuno di voi potrebbe aiutarmi? Mi servirebbe un piccolo esempio su come si utilizza il metodo comparator() dell'interfaccia SortedSet.

    So che questo metodo serve per restituire il comparatore del set ordinato chiamante, se l'ordinamento è quello naturale, allora questo metodo restituisce false...ma come faccio a mettere un mio ordinamento in modo tale che con la chiamata al metodo comparator mi viene restituito l'ordinamento?...

    Thanks .

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Come si usa il metodo comparator();

    Originariamente inviato da pupys87
    Ciao a tutti, qualcuno di voi potrebbe aiutarmi? Mi servirebbe un piccolo esempio su come si utilizza il metodo comparator() dell'interfaccia SortedSet.

    So che questo metodo serve per restituire il comparatore del set ordinato chiamante, se l'ordinamento è quello naturale, allora questo metodo restituisce false...ma come faccio a mettere un mio ordinamento in modo tale che con la chiamata al metodo comparator mi viene restituito l'ordinamento?...
    Quel metodo comparator() non ti serve .... restituisce solo il Comparator eventualmente già presente nel set (o null se il set usa il natural ordering).

    Il SortedSet "concreto" tipicamente più usato è TreeSet. Se vuoi che un TreeSet<TuoTipo> mantenga ordinati gli elementi secondo un certo criterio specifico, allora implementa tu un Comparator<TuoTipo> e poi passalo al costruttore di TreeSet.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    Comparator

    Yes perfetto, ma implementare il metodo comparator, vuol dire creare un metodo per impostare l'ordinamento della mia collection?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Comparator

    Originariamente inviato da pupys87
    Yes perfetto, ma implementare il metodo comparator, vuol dire creare un metodo per impostare l'ordinamento della mia collection?
    Devi definire una tua classe che implementa Comparator<TuoTipo> e al cui interno implementi il metodo compare(TuoTipo obj1, TuoTipo obj2), vedi javadoc per dettagli.
    Una istanza del tuo comparatore la passi al costruttore di TreeSet. Posso anche fare un esempio, se ti è necessario.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    ...

    Si si sarebbe ancora meglio grazie ...

    Comunque per caso c'è di mezzo il metodo compareTo ?...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ...

    Originariamente inviato da pupys87
    Si si sarebbe ancora meglio grazie ...

    Comunque per caso c'è di mezzo il metodo compareTo ?...
    compareTo() è di Comparable .... l'ho detto prima: Comparator ha compare().


    codice:
    import java.util.*;
    
    public class Prova {
        public static void main(String[] args) {
            TreeSet<String> set = new TreeSet<String>(new StrLenComparator());
    
            set.add("gastone");
            set.add("pippo");
            set.add("topolino");
            set.add("qui");
            set.add("quo");
            set.add("qua");
    
            for (String s : set) {
                System.out.println(s);
            }
        }
    }
    
    class StrLenComparator implements Comparator<String> {
        public int compare(String s1, String s2) {
            if (s1.length() < s2.length()) {
                return -1;
            } else if (s1.length() > s2.length()) {
                return +1;
            } else {
                // Se lunghezza uguale, compara il contenuto
                return s1.compareTo(s2);
            }
        }
    }
    L'output è:

    qua
    qui
    quo
    pippo
    gastone
    topolino
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    ...

    Grazie mille ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    10
    Sfrutto questo post per porre una domanda sempre sui comparatori....A me servirebbe un comparatore che restituisce un double invece che un intero...ma sia comparator che comparable hanno come ritorno un intero...
    Come posso fare??

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tete8646
    A me servirebbe un comparatore che restituisce un double
    E che vuol dire????

    Originariamente inviato da tete8646
    ma sia comparator che comparable hanno come ritorno un intero...
    Ma ovvio. La interfaccia è quella (non la cambi) e comunque il valore di ritorno serve solo per indicare il risultato della comparazione. Tale valore non serve tipicamente a te .... serve, detto in generale, all'algoritmo che "sa" di dover sfruttare Comparable o Comparator. Come ad esempio il sort() di Arrays o Collections o la gestione interna di un TreeSet o TreeMap.

    Tu non devi restituire alcun double ... il tuo compareTo() o compare() deve solo dire se un oggetto è minore/uguale/maggiore dell'altro. Punto. Serve restituire un int, minore, uguale o maggiore di 0.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    10
    Prima andavo a comparare il peso di un percorso all'interno di un grafo che era di tipo int in questo modo:
    codice:
    public class WeightComparator implements Comparator<IPath> {
    
    	public int compare(IPath o1, IPath o2) {
    		return (o1.getWeight() - o2.getWeight());
    	}
    
    }
    ora pero ho dovuto apportare delle modifiche al codice e non ho piu valori interi ma reali e il Path.getWeight() restituisce un valore reale....ovviamente questo da errore e non riesco a risolvero (sempre se ce un modo per farlo).....

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.