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

Rispondi quotando
