Visualizzazione dei risultati da 1 a 10 su 15

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2016
    Messaggi
    7

    [JAVA] Ordinare ArrayList di oggetti diversi.

    Salve, so che il titolo può essere fuorviante ma vi spiego subito:
    Ho una classe Prodotto, ed una classe figlia ProdottoScontato.
    Ho una classe Fattura con un ArrayLIst di tipo Prodotto che mette a disposizione vari metodi e funzioni per aggiungere, eliminare, cercare e per ORDINARE I PRODOTTI IN BASE AL PREZZO.
    Ho una classe Test che crea con il 70% di probabilità un Prodotto e con il 30% un ProdottoScontato e li aggiunge ad una Fattura. Usa la funziona ordinaInBase al prezzo della classe Fattura e succede che:
    Gli oggetti di Tipo Prodotto vengono ordinati, come volevo, in senso decrescente in base al prezzo, gli oggetti di tipo PrdottoScontato vengono ordinati al contrario e spostati tutti all'inizio della lista. Perchè? Come posso risolvere?
    La funzione Ordina di Fattura crea un TreeSet passando un Conparator da me definito e uso addall per aggiungere tutti gli elementi dell'ArrayList di Prodotto, tranne i duplicati.
    Dopo vari tentativi ho provato a definire il Comparatore così, so che può sembrare senza senso, e sicuramente lo è ma volevo capire se fosse un problema di cast...


    codice:
    class Comparatore implements Comparator<Object> {
    
    
        public int compare(Object o1, Object o2) {
    
    
            Prodotto prod1 = null;
            Prodotto prod2 = null;
            if (o1.getClass() == ProdottoScontato.class
                    && o2.getClass() == ProdottoScontato.class) {
                prod1 = (ProdottoScontato) o1;
                prod2 = (ProdottoScontato) o2;
    
    
               
    
    
            } else if (o1.getClass() == Prodotto.class
                    && o2.getClass() == ProdottoScontato.class) {
                prod1 = (Prodotto) o1;
                prod2 = (ProdottoScontato) o2;
                
    
            } else if (o1.getClass() == ProdottoScontato.class
                    && o2.getClass() == Prodotto.class) {
                prod1 = (ProdottoScontato) o1;
                prod2 = (Prodotto) o2;
    
    
                 
    
            } else if (o1.getClass() == Prodotto.class
                    && o2.getClass() == Prodotto.class) {
                prod1 = (Prodotto) o1;
                prod2 = (Prodotto) o2;
    
    
                        }
      if (prod1.getPrezzo() > prod2.getPrezzo()) {
                    return -1;
                } else if (prod1.getPrezzo() < prod2.getPrezzo()) {
                    return 1;
                } else {
                    return 0;
                }
         }
    }

    L'output è il seguente:

    codice:
    26  ProdScontato 1.0
    27  ProdScontato 2.0
    22  ProdScontato 3.0
    10  Prod 8.0
    17  Prod 2.0
    Ultima modifica di LeleFT; 08-02-2016 a 14:47 Motivo: Aggiunti i tag CODE

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.