PDA

View Full Version : [JAVA] Ordinare lista di oggetti in base ad uno specifico campo


e-commerce84
29-07-2011, 14:38
Ciao,

se io ho una lista di oggetti di tipo TaskDTO dichiarata cosė:


List<TaskDTO> listaTaskUrgenti = new ArrayList<TaskDTO>();


e successivamente popolata con un certo numero di oggetto di tipo TaskDTO

Ogni oggetti TaskDTO ha una serie di campi tra cui una data:


public class TaskDTO extends AbstractBaseDTO {

/**
*
*/
private static final long serialVersionUID = 1L;

private String activityType;
private String task;
private Date dataCreazione;
private String cliente;
private String operatoreFO;
private String operatoreBO;
private boolean urgente;

.......
METODI GETTER e SETTER
}


Se volessi ordinare la lista listaTaskUrgenti in base al valore contenuto in dataCreazione in modo tale da avere gli oggetti con le date pių vecchie all'inizio e quelli con le date pių recenti alla fine della lista....come potrei farlo in modo pratico e veloce?

Grazie
Andrea

banryu79
29-07-2011, 16:23
Collection.sort() passando come argomenti la tua lista e un Comparator per TastDTO da te definito, che compara le date.
Il Comparator lo definisci (ad esempio) cosė:

class ByDateComparator implements Comparator<TaskDTO>
{
public static enum Order {
ASC, DESC
}

public final Order oder;

public ByDateComparator(Order chosen) {
oder = chosen;
}

int compare(TaskDTO a, TaskDTO b) {
switch (order) {
case ASC :
return a.getDate().compareTo(b.getDate());
case DESC :
return b.getDate().compareTo(a.getDate());
}
}

boolean equals(Object obj) {
if (this == obj) return true;
return obj instanceof ByDateComparator &&
this.order == ((BydateComparator)obj).order;
}
}

La enum Order serve per personalizzare il Comparator in caso tu voglia un ordine crescente o decrescente (comunque non č neccessario: puoi fare senza e Collection.sort di default ti restituisce la lista in ordine ascendente, se lo vuoi discendente fai un reverse)
Scritto tutto al volo senza passare da un editor, percui verifica...

gugoXX
29-07-2011, 16:55
Certo che il confronto con i competitor piu' moderni e' impietoso.

banryu79
29-07-2011, 17:00
Certo che il confronto con i competitor piu' moderni e' impietoso.
Hai ragione, ma non vedo che c'entri col topic...