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

    come si usa il comparator ?

    Salve a tutti,
    io ho un arraylist di oggetti e richiamo il metodo Collection.sort(<ArrayList>, <Comparator_Class>), ma vi viene fuori un array list con gli elementi tutti uguali.

    Come si usa questa funzione di Java ?
    Non ci sono Queen senza Freddie !

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    java.util.Comparator è un'interfaccia che espone 2 metodi:

    - compare(T t1, T t2)
    - equals(Object o)

    Quindi, per avere un oggetto di tipo Comparator dovrai scrivere una classe (è la via più semplice) che implementa tale interfaccia, per un determinato tipo di oggetto T (il tipo di oggetti contenuti nel tuo ArrayList).

    Chiaramente, dovrai fornire una implementazione di tali metodi che ne soddisfi il loro contratto:

    - compare(T t1, T t2) ritorna un intero con le seguenti caratteristiche:
    < 0: se t1 è "minore" di t2 (ovvero, se nell'ordinamento, t1 viene prima di t2)
    = 0: se t1 e t2 sono "uguali" (ovvero, se nell'ordinamento, nessuno dei due viene prima dell'altro)
    > 0: se t1 è "maggiore" di t2 (ovvero, se nell'ordinamento, t1 viene dopo di t2)

    -equals(Object o) ritorna true se l'oggetto "this" è uguale all'oggetto passato come parametro.

    Ovviamente, il metodo sort() di Collections usa il metodo compare() del Comparator.

    Se viene passato "null" come oggetto Comparator, il metodo sort() usa l'ordinamento naturale degli oggetti (chiaramente, gli oggetti devono implementare Comparable, un'altra interfaccia simile a Comparator, ma che prevede solo il metodo compareTo() con le stesse caratteristiche di compare() ).

    Come oggetto "comparator" si può usare anche uno qualunque degli oggetti della lista, se questi oggetti implementano a loro volta Comparator.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Io ai tempi ho fatto così

    codice:
    LinkedList<Scores>ls=lnk.getSegnatureMatch(partita.getIdPartita());				
    Collections.sort(ls, new ScoresComparator());
    ----------------------------------------------------------
    import java.util.Comparator;
    
    class ScoresComparator implements Comparator<Scores> {
    	
    	public int compare(Scores sc1, Scores sc2){
    		
    		Scores s1=sc1;
    		Scores s2=sc2;
    		int golprima1=0;
    		int golprima2=0;
    		int incasa1=Integer.parseInt(s1.getName());
    		if(s1.getMinuto().length()>=2)
    			golprima1=Integer.parseInt(s1.getMinuto().substring(0,2));
    		else
    			golprima1=Integer.parseInt(s1.getMinuto().substring(0,1));
    		
    		int incasa2=Integer.parseInt(s2.getName());
    		if(s2.getMinuto().length()>=2)
    			golprima2=Integer.parseInt(s2.getMinuto().substring(0,2));
    		else
    			golprima2=Integer.parseInt(s2.getMinuto().substring(0,1));
    		
    		if(incasa1<incasa2 && golprima1<golprima2)
    			return 1;
    		else
    			return 0;
    	}
    
    }
    dovevo comparare dei "minuti" che erano stati per qualche motivo memorizzati nel DB come stringhe. a tal proposito dovevo prendere i primi due caratteri (o solo 1 se il minuto e tra l'1 e il 9) e comparli per capire quale veniva primo....
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

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.