Trier la collection Java

J’ai une collection Java:

Collection list = new ArrayList(); 

CustomObject a un champ id maintenant avant la liste d’affichage Je veux sortinger cette collection par cet id .

Est-ce que je pourrais faire ça?

Utilisez un comparateur :

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

De plus, si CustomObject implémente Comparable , utilisez simplement Collections.sort(list)

Avec JDK 8, la syntaxe est beaucoup plus simple.

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

Beaucoup plus simple

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

Le plus simple

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

De toute évidence, le code initial peut également être utilisé pour JDK 8.

La question est: “Collection de sorting”. Donc, vous ne pouvez pas utiliser Collections.sort(List l, Comparator comparator) .

Quelques conseils:

Pour le type de collection:

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

Pour le type de liste:

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

Pour le type de set:

 Set set = getSomeSsortingngSet(); // 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 = getSomeSsortingngSet(); Set sortedSet = new TreeSet(defaultComparator); sortedSet.addAll(set); 

Version Java 8. Il y a la méthode java.util.List#sort(Comparator c)

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

ou

 List list = getSomeSsortingngList(); list.sort((Ssortingng o1, Ssortingng o2) -> o1.compareTo(o2)); 

ou pour les types qui implémentent Comparable:

 List list = getSomeSsortingngList(); list.sort(Ssortingng::compareTo); 

Un exemple légèrement différent dit si vous avez une classe qui n’implémente pas Comparable mais que vous voulez quand même la sortinger sur un champ ou une méthode.

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

Vous devez implémenter l’interface Comparator .

Exemple:

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

Ensuite, vous pouvez utiliser la méthode Collections classes Collections.sort() :

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

Implémentez l’interface Comparable sur votre customObject.

Comparator est la voie

Regarde aussi

  • sorting des arraylistes

A partir de Java 8, vous pouvez maintenant le faire avec un stream utilisant un lambda:

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

Utilisez un sorting

Vous devez juste faire ceci:

Tous les éléments de la liste doivent implémenter l’interface Comparable.

(Ou utilisez la version ci-dessous, comme d’autres l’ont déjà dit.)

Beaucoup de bonnes réponses, mais je n’ai pas trouvé celle-ci: les collections ne peuvent pas être sortingées, vous ne pouvez que les parcourir.

Maintenant, vous pouvez les parcourir et créer un nouvel object sortingé. Suivez les réponses ici pour cela.

Avec Java 8, vous avez plusieurs options, combinant des références de méthodes et le comparateur de comparing intégré:

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

SortedSet et Comparator. Le comparateur doit honorer le champ d’ identification .

Vous pouvez utiliser java classe personnalisée à des fins de sorting.

Vous pouvez aussi utiliser:

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