Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2016
    Messaggi
    9

    Ordinamento ulteriore ArryList a parità di pimo ordinamento

    Salve sto creando un catalogo di prodotti avente come varabiali prezzo , denominazione e Id.
    Ho scritto un metodo tramite Comparator per ordinare l'ArrayList in base al prezzo, ma non so come fare se voglio far si che a parità di prezzo i prodotti si ordinano in ordine alfabetico in base alla designazione ( e successivamente eventualmente per ordine di id)

    per esempio un catalogo di penne voglio che si ordini cosi:

    Prezzo design. ID
    1.00€ BicBlu 305
    2.00€ BicRed 195
    7.00€ Stylo 256
    7.00€ Stylo 257
    9.99€ Plume 115
    Sapreste aiutarmi?
    Grazie Mille

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da anccelo Visualizza il messaggio
    non so come fare se voglio far si che a parità di prezzo i prodotti si ordinano in ordine alfabetico in base alla designazione ( e successivamente eventualmente per ordine di id)
    Comparazioni di questo tipo, su più campi, si fanno "in cascata", andando sui campi successivi solo se necessario.
    Prima confronti i due prezzi. Se sono diversi, hai già il risultato finale (uno minore o maggiore dell'altro) e NON devi andare su altri campi. Se sono uguali, allora passi a confrontare la designazione. Idem se sono diversi hai già il risultato finale, ecc...
    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
    Mar 2016
    Messaggi
    9
    Buona sera Anfrea. Grazie mille per avermi risposto ancora.

    Io sto provando a fare come hai detto. cioé ho crato una prima copia dell'arrayList del mio catalogo ordinata in base ai prezzi, ora in cascata sto cercando di ordinarla ulteriormente per gli elementi con lo stesso prezzo e poi stessa designazione a colpi di cicli for e di if . ma ci sto da un po' e non riesco ad avere risultati soddisfacenti , quindi mi domando se esista qualche metodo simili al'utilizzo di comparator...
    questo é quanto fatto fin ora....ma non mi ordina mai perfettamente , credo che sbaglio nell'utilizzo dei cicli for

    codice:
    public Collection<Produit> produitsTrieParPrixCroissant() {
            if (catalogue.isEmpty()) {
                System.out.println("Aucun produit dans le catalogue");
                return catalogue; // / modifico da return null, a return catalogue
            } else {
                ArrayList<Produit> c = new ArrayList<Produit>(catalogue);
                Collections.sort(c, new ComparatorProduitPrix());
                for (int i = 0; i < c.size() - 1; i++) {
                    for (int j = i + 1; j < c.size(); j++) {
                        if (c.get(i).getPrix() == c.get(j).getPrix()) {
                            int r = c.get(i).getDesignation()
                                    .compareTo(c.get(j).getDesignation());
                            if (r > 0) {
                                Produit mom = c.get(i);
                                c.set(i, c.get(i + 1));
                                c.set(i + 1, mom);
                            }
                            if (r == 0) {
                                if (c.get(i).getIdentifiant() > c.get(j).getIdentifiant()) {
                                    Produit mom = c.get(i);
                                    c.set(i, c.get(i + 1));
                                    c.set(i + 1, mom);
    
    
                                }
    
    
                            }
                        }
                    }
                }
    
    
                return c;
            }
        }
    Ultima modifica di LeleFT; 09-05-2016 a 09:26 Motivo: Aggiunti i tag CODE

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da anccelo Visualizza il messaggio
    credo che sbaglio nell'utilizzo dei cicli for
    Scusa ma un conto è se vuoi/devi implementare tu un algoritmo di ordinamento (uno di quelli noti, chiaramente, es. BubbleSort ... difficilmente uno se ne inventa di nuovi ...).
    Un altro conto è se ti basta sfruttare l'algoritmo di ordinamento già implementato nei sort() del framework, nel qual caso è solo sufficiente fornire il criterio di comparazione basato su Comparable o Comparator.

    Se avessi una classe Persona (con String nome, String cognome, int annoNascita) e volessi un Comparator che ordina per anno nascita e a parità di anno per cognome e poi per nome, allora il Comparator sarebbe:

    codice:
    public class PersonePerAnnoComparator implements Comparator<Persona> {
        public int compare(Persona p1, Persona p2) {
            int r = Integer.compare(p1.getAnnoNascita(), p2.getAnnoNascita());
    
            if (r == 0) {
                r = p1.getCognome().compareTo(p2.getCognome());
    
                if (r == 0) {
                    r = p1.getNome().compareTo(p2.getNome());
                }
            }
    
            return r;
        }
    }

    Tutto qui.
    Ultima modifica di andbin; 08-05-2016 a 16:26
    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
    Mar 2016
    Messaggi
    9
    Grande Andrea. io esattamente questo intendevo....
    Ora Provo a modificare il mio Comparator.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2016
    Messaggi
    9

    Ancora Grazie

    Andrea ancora grazie . Impeccabile con la modifica del mio Comparator (anche se non tutti le variabili erano delle String e quindi non tutti avevano il metodo comareTo , ma con un if/else if/else me ne sono uscito alla grande rispetto a inserire il bubble sort ) .
    E' la seconda volta che chiedo una mano in questo forum ed é la seconda volta che mi rispondi ( l'altra volta non arrivammo a una soluzione) . Non conosco il forum ma se c'é da mettere qualche I-Like o simile da qualche parte in tuo favore lo faro' con piacere.
    Buona serata e a presto.

Tag per questa discussione

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.