Sto avendo un Arraylist di oggetti. Questi oggetti hanno un attributo o un tipo di dati: “String”. Ho bisogno di ordinare l’Arraylist per quella stringa. Come ottenere questo?
Devi scrivere un Comparator
e usare Collections.sort(List
per ordinare la tua List
.
Oppure, MyObject
può anche implements Comparable
, definendo un ordinamento naturale che si confronta con il tuo specifico attributo, e quindi usa Collections.sort(List
posto.
Sulla List
smistamento su vari criteri:
Sul Comparator
e Comparable
Un altro buon modo per farlo è un po ‘più flessibile se c’è più di una proprietà di un object che potreste desiderare di ordinare usando la class Order di Guava con la sua onResultOf(Function)
. Ciò è ideale per l’ordinamento in base alle proprietà poiché una funzione può essere utilizzata per recuperare e restituire una proprietà specifica di un object. Per un semplice esempio, immaginare una class Person
con i metodi String getLastName()
e String getLastName()
.
List people = ...; Collections.sort(people, Ordering.natural().onResultOf( new Function() { public String apply(Person from) { return from.getFirstName(); } }));
Quanto sopra ordinerà la lista per nome.
Per renderlo più leggibile, potresti voler definire le funzioni che potresti voler utilizzare come campi public static final
sulla class Person
. Quindi potresti ordinare per cognome come questo:
Collections.sort(people, Ordering.natural().onResultOf(Person.GET_LAST_NAME));
Come nota divertente a parte, tutto ciò sarà molto più semplice in Java 8 con espressioni lambda e riferimenti al metodo. Sarai in grado di scrivere qualcosa di simile senza dover definire classi interne anonime maldestre o campi finali statici:
import static java.util.Comparator.comparing; ... people.sort(comparing(Person::getLastName));