Ordinamento degli elenchi di array di oggetti per object

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, Comparator 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.

Guarda anche

  • Esercitazioni su Java / Ordinamento di oggetti

Domande correlate

Sulla List smistamento su vari criteri:

  • Ordinamento di una lista array di contatti

Sul Comparator e Comparable

  • Quando utilizzare Comparable vs Comparator
  • differenza tra compare () e compareTo ()
  • Contratto comparabile e comparatore per quanto riguarda il nulla
  • Perché Java Collections Framework offre due modi diversi di ordinare?

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));