Come si ordinerebbe una lista di oggetti che hanno più di un elemento ordinabile?
Supponiamo di avere un oggetto semplice Car
e la macchina è definita come tale:
class Car {
public String make;
public String model;
public int year;
public String color;
// ... No methods, just a structure / container
}
Ho progettato un framework semplice che avrebbe consentito di fornire più SortOption
s a un Sorter
che avrebbe poi ordinato l'elenco.
interface ISorter<T> {
List<T> sort(List<T> items);
void addSortOption(ISortOption<T> option);
ISortOption<T>[] getSortOptions();
void setSortOption(ISortOption<T> option);
}
interface ISortOption<T> {
String getLabel();
int compare(T t1, T t2);
}
Esempio di utilizzo
class SimpleStringSorter extends MergeSorter<String> {
{
addSorter(new AlphaSorter());
}
private static final class AlphaSorter implements ISortOption<String> {
// ... implementation of alpha compare and get label
}
}
Il problema con questa soluzione è che non è facilmente espandibile. Se la macchina dovesse mai ricevere un nuovo campo, ad esempio, currentOwner. Dovrei aggiungere il campo, quindi rintracciare il file della classe sorter, implementare una nuova classe di opzioni di ordinamento quindi ricompilare l'applicazione per la ridistribuzione.
C'è un modo più semplice e più espandibile / pratico per ordinare dati come questo?