Tutti questi oggetti dovrebbe avere una comune classe astratta/interfaccia, come Alive
con un metodo getLifeTime()
, e si potrebbe avere sia Alive
estende Comparable<Alive>
o crea il tuo Comparator<Alive>
.
public abstract class Alive extends Comparable<Alive>{
public abstract int getLifeTime();
public int compareTo(Alive alive){
return 0; // Or a negative number or a positive one based on the getLifeTime() method
}
}
O
public interface Alive {
int getLifeTime();
}
public class AliveComparator implements Comparator<Alive>{
public int compare(Alive alive1, Alive alive2){
return 0; // Or a negative number or a positive one based on the getLifeTime() method
}
}
Dopo che il prossimo passo è quello di utilizzare una collezione ordinato automaticamente (TreeSet<Alive>
) oppure ordinare una List<Alive>
con Collections.sort()
.
Risorse:
fonte
2010-10-02 12:47:05
Se si implementa 'Alive.compareTo', è necessario implementarlo correttamente, ovvero confrontare realmente le durate dei due oggetti invece di restituire 0. Altrimenti occorrerebbe un'implementazione (fondamentalmente duplicata) in ogni sottoclasse concreta. –
@ Péter Török, non ho eseguito l'implementazione perché non conosco l'ordine desiderato. E non è necessario riscriverlo in ogni sottoclasse, questo è il motivo per cui ho usato una classe astratta nella prima parte e non un'interfaccia e anche perché ho lasciato questo lungo commento sulla riga 'return 0'. –
Siamo spiacenti, il tuo commento sul codice non è chiaro su questo (almeno per me); è per questo che ho pensato fosse meglio aggiungere un commento chiarificatore :-) –