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

    [JAVA] Ordinare oggetti in base al valore di un campo

    Buongiorno,

    ho un'ArrayList di oggetti di tipo Pippo.

    La classe Pippo ha un attributo 'chiave': il valore di questo attributo può essere A, B, C o D.

    L'ArrayList non è ordinata, e vorrei che questi oggetti fossero ordinati in modo che risultassero per primi quelli il cui valore dell'attributo chiave fosse A, poi B ecc... ecc...


    Fatto questo, otterrei un ArrayList ordinata.

    Di seguito, vorrei che la lista così ottenuta, tenuto fisso l'ordinamento per l'attributo 'chiave', fosse ordinata di nuovo secondo l'attributo 'tempo'.


    Faccio esempio

    ho 4 oggetti, con valori 'chiave', rispettivamente,

    C, C, D, A, B, A, A

    Otterrei

    A, A, A, B, C, D, D


    A loro volta, i 3 oggetti Pippo con attributo 'chiave' = A dovranno essere riordinati secondo il valore di un altro attributo.

    Grazie dell'attenzione, buona giornata.

  2. #2

    Re: [JAVA] Ordinare oggetti in base al valore di un campo

    Originariamente inviato da ragnonerodocet
    Di seguito, vorrei che la lista così ottenuta, tenuto fisso l'ordinamento per l'attributo 'chiave', fosse ordinata di nuovo secondo l'attributo 'tempo'.
    Potresti definire un Comparatore per questa tua classe, e quindi definire come chiave primaria di confronto 'chiave' e poi come seconda chiave 'tempo'.

  3. #3
    Sinceramente ho capito il concetto ma non so come applicarlo...

  4. #4
    Non conoscendo la struttura della tua classe Pippo le cui istanze contenute nell'ArrayList vuoi ordinare ti offro un semplice spunto che dovrai adattare alle tue esigenze.
    Puoi fare una cosa del genere, crei una classe:

    codice:
    import java.util.Comparator;
    
    public class PippoComparator implements Comparator<Pippo> {
    
    	public int compare(Pippo p1, Pippo p2) {
    		if (p1.getValoreChiave().compareTo(p2.getValoreChiave()) < 0) {
    			return -1;
    		} else if (p1.getValoreChiave().compareTo(p2.getValoreChiave()) > 0) {
    			return 1;
    		}
    		return 0;
    	}
    
    }
    e nelle classe in cui si trova l'ArrayList da ordinare fai una cosa del genere:

    codice:
    // ArrayList da ordinare
    List<Pippo> pippos = new ArrayList<Pippo>();
    ...
    Collections.sort(pippos, new PippoComparator());
    ...
    e ti ritroverai l'ArrayList pippos ordinato in base allc chiave da te scelta. Ovviamente puoi aggiungere più chiavi di ordinamento all'interno della classe PippoComparator aggiungendo un po' di logica in più. Ad esempio, a parità di valoreChiave puoi confrontare un altro attributo ecc.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Originariamente inviato da ragnonerodocet
    Sinceramente ho capito il concetto ma non so come applicarlo...
    Trattai l'argomento già in questa discussione: http://forum.html.it/forum/showthrea...8#post13256468.

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.