Ordina raccolta Java

Ho una collezione Java:

Collection list = new ArrayList(); 

CustomObject ha ora un campo id prima dell’elenco di visualizzazione voglio ordinare questa collezione con id .

C’è un modo per farlo?

Usa un comparatore :

 List list = new ArrayList(); Comparator comparator = new Comparator() { @Override public int compare(CustomObject left, CustomObject right) { return left.getId() - right.getId(); // use your logic } }; Collections.sort(list, comparator); // use the comparator as much as u want System.out.println(list); 

Inoltre, se CustomObject Comparable , usa solo Collections.sort(list)

Con JDK 8 la syntax è molto più semplice.

 List list = getCustomObjectList(); Collections.sort(list, (left, right) -> left.getId() - right.getId()); System.out.println(list); 

Molto più semplice

 List list = getCustomObjectList(); list.sort((left, right) -> left.getId() - right.getId()); System.out.println(list); 

Più semplice

 List list = getCustomObjectList(); list.sort(Comparator.comparing(CustomObject::getId)); System.out.println(list); 

Ovviamente il codice iniziale può essere usato anche per JDK 8.

La domanda è: “Ordina raccolta”. Quindi non puoi usare Collections.sort(List l, Comparator comparator) .

Alcuni suggerimenti:

Per tipo di raccolta:

 Comparator defaultComparator = new Comparator() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }; Collection collection = getSomeStringCollection(); String[] strings = collection.toArray(new String[collection.size()]); Arrays.sort(strings, defaultComparator); List sortedStrings = Arrays.asList(strings); Collection collection = getSomeStringCollection(); List list = new ArrayList(collection); Collections.sort(list, defaultComparator); collection = list; // if you wish 

Per tipo di lista:

 List list = getSomeStringList(); Collections.sort(list, defaultComparator); 

Per tipo di set:

 Set set = getSomeStringSet(); // Than steps like in 'For Collection type' section or use java.util.TreeSet // TreeSet sample: // Sorted using java.lang.Comparable. Set naturalSorted = new TreeSet(set); Set set = getSomeStringSet(); Set sortedSet = new TreeSet(defaultComparator); sortedSet.addAll(set); 

Versione Java 8. C’è il metodo java.util.List#sort(Comparator c)

 List list = getSomeStringList(); list.sort(defaultComparator); 

o

 List list = getSomeStringList(); list.sort((String o1, String o2) -> o1.compareTo(o2)); 

o per i tipi che implementano Paragonabile:

 List list = getSomeStringList(); list.sort(String::compareTo); 

Un esempio leggermente diverso dice se hai una class che non implementa Comparable ma vuoi comunque ordinarla su un campo o un metodo.

 Collections.sort(allMatching, new Comparator() { @Override public int compare(final ClassOne o1, final ClassOne o2) { if (o1.getMethodToSort() > o2.getMethodToSort()) { return 1; } else if (o1.getMethodToSort() < o2.getMethodToSort()) { return -1; } return 0; } }); 

Dovresti implementare l’interfaccia di Comparator .

esempio:

 public class CustomComparator implements Comparator { @Override public int compare(CustomObject o1, CustomObject o2) { return o1.getId().compareTo(o2.getId()); } } 

Quindi è ansible utilizzare il metodo Collections.sort() classi Collections.sort() :

 Collections.sort(list, new CustomComparator()); 

Implementa l’interfaccia Comparabile sul tuo object personalizzato.

Comparator è il modo

Vedi anche

  • cernita di-arraylist

A partire da Java 8 ora puoi farlo con un stream usando un lambda:

 list.stream().sorted(Comparator.comparing(customObject::getId)) .foreach(object -> System.out.println(object)); 

Usa ordinamento .

Devi solo fare questo:

Tutti gli elementi nell’elenco devono implementare l’interfaccia Comparable.

(Oppure usa la versione sottostante, come già detto).

Molte risposte corrette, ma non ho trovato questo: le raccolte non possono essere ordinate, puoi solo scorrere attraverso di esse.

Ora puoi scorrere su di loro e creare un nuovo something ordinato. Segui le risposte qui per quello.

Con Java 8 hai diverse opzioni, combinando i riferimenti dei metodi e il comparatore di comparing integrato:

 import static java.util.Comparator.comparing; Collection list = new ArrayList(); Collections.sort(list, comparing(CustomObject::getId)); //or list.sort(comparing(CustomObject::getId)); 

SortedSet e Comparator. Il comparatore dovrebbe onorare il campo id .

È ansible utilizzare la class personalizzata java ai fini dell’ordinamento.

Puoi anche usare:

 Collections.sort(list, new Comparator() { public int compare(CustomObject obj1, CustomObject obj2) { return obj1.id - obj2.id; } }); System.out.println(list);