Domanda Sort di una lista object

Stato
Discussione chiusa ad ulteriori risposte.

Daniele1100000

Utente Gold
13 Agosto 2009
640
106
54
318
Buonasera vi scrivo per capire il sort come viene effettuato: il nostro professore crea una classe solo per ridefinire il Compare ovvero cosi:
Codice:
public class SortByAnno implements Comparator<Film> {
public int compare(Film a, Film b)
{
return a.getAnnoProduzione().compareTo(b.getAnnoProduzione());
}
}
Il problema che facendo cosi ho errori sul return il seguente Cannot invoke compareTo(int) on the primitive type int.
Ho settato i set ma nulla non so come risolverlo.
Grazie in anticipo
 
Ciao, prova a definire il tipo di ritorno di getAnnoProduzione in Integer al posto di int.

Java:
Integer annoDiProduzione;

public static Integer getAnnoDiProduzione (){
    ...
    return annoDiProduzione;
}
 
Ultima modifica:
Ciao, prova a definire il tipo di ritorno di getAnnoProduzione in Integer al posto di int.

Java:
Integer annoDiProduzione;

public static Integer getAnnoDiProduzione (){
    ...
    return annoDiProduzione;
}
compare DEVE ritornare un int altrimenti non stai ridefindendo il metodo astratto compare dell'interfaccia Comparator (non stai eseguendo un override corretto del metodo) ma stai dichiarando un metodo nuovo che ritorna un Integer e non ha nulla a che vedere con il compare implementato dall'interfaccia.
Venendo al problema , stai cercando di richiamare un metodo su un tipo primitivo e non un oggetto, la chiamata
Codice:
a.getAnnoProduzione().compareTo(b.getAnnoProduzione());
non può funzionare perché getAnnoProduzione ritorna un intero NON il corrispettivo oggetto wrappato dalla classe Integer.
per chiamare questo metodo devi chiamarlo su un oggetto e siccome l'hai ridefinito in una classe immagino che tu voglia ridefinire compare nel seguente modo:
Java:
public class SortByAnno implements Comparator<Film> {
//Metoio della classe
    @Override
    public int compare(Film a,Film b) {
        return a.getAnnoProduzione() - b.getAnnoProduzione();
     }
}
Inoltre la Comparator è un'interfaccia funzionale quindi andrebbero utilizzate con essa le espressioni lambda , per comparare 2 oggetti magari differenti, l'implementazione tramite lambda è la seguente:
Java:
Comparator<Film> lambda = (Film a, Film b) -> a.getAnnoProduzione() - b.getAnnoProduzione();
Film a = new Film(10); //Immagino che ci sia un costruttore per la variabile di istanza AnnoProduzione[ritornata da getAnnoProduzione()] nella classe film
Film b = new Film(10);
List<Film> films = new ArrayList<>(Arrays.asList(a,b));
Collections.sort(films,lambda);//Il metodo statico sort della classe collections accetta la lista e un comparator, la lambda verrà eseguita per ogni elemento della lista in automatico dal metodo sort.
Se proprio vuoi implementare un'interfaccia e ridefinirne i metodi per comparare, come stai cercando di fare tu, usa Comparable e non Comparator.
Spero di essere stato chiaro
 
Stato
Discussione chiusa ad ulteriori risposte.