Originariamente inviato da Leon90tps
eh ed è proprio quello il problema nn riesco a capire come strutturare il metodo compareto....come confrontare l'array di dieci nomi...
Esempio completo sia con Comparable che Comparator.
codice:
import java.util.*;
public class ProvaOrdinamentoLibri {
public static void main(String[] args) {
Libro[] libri = {
new Libro("The Definitive Guide to Java Swing, Third Edition", 2005),
new Libro("Effective Java, 2nd Edition", 2008),
new Libro("Java Concurrency in Practice", 2006),
new Libro("Effective Enterprise Java", 2004)
};
// Ordina i libri per titolo in senso ascendente
Arrays.sort(libri); // Usa Comparable (implementato negli oggetti)
for (Libro l : libri) {
System.out.println(l);
}
System.out.println("-----");
// Ordina i libri per anno di pubblicazione in senso decrescente (dal più recente)
Arrays.sort(libri, new LibroPiuRecenteComparator()); // Usa Comparator specifico esterno
for (Libro l : libri) {
System.out.println(l);
}
}
}
class Libro implements Comparable<Libro> {
private String titolo;
private int annoPubblicazione;
public Libro(String titolo, int annoPubblicazione) {
this.titolo = titolo;
this.annoPubblicazione = annoPubblicazione;
}
public String getTitolo() {
return titolo;
}
public int getAnnoPubblicazione() {
return annoPubblicazione;
}
public String toString() {
return titolo + ", " + annoPubblicazione;
}
public int compareTo(Libro altroLibro) {
// Il titolo è String e String è Comparable, quindi ha compareTo()
return getTitolo().compareTo(altroLibro.getTitolo());
}
}
class LibroPiuRecenteComparator implements Comparator<Libro> {
public int compare(Libro libro1, Libro libro2) {
int anno1 = libro1.getAnnoPubblicazione();
int anno2 = libro2.getAnnoPubblicazione();
return anno1 > anno2 ? -1 : anno1 < anno2 ? +1 : 0;
}
}