Ich habe eine Java-Sammlung:
Collection<CustomObject> list = new ArrayList<CustomObject>();
CustomObject
hat id
jetzt ein Feld vor der Anzeigeliste Ich möchte diese Sammlung danach sortieren id
.
Kann ich das auf irgendeine Weise tun?
java
sorting
collections
Makky
quelle
quelle
Antworten:
Verwenden Sie einen Komparator :
List<CustomObject> list = new ArrayList<CustomObject>(); Comparator<CustomObject> comparator = new Comparator<CustomObject>() { @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);
Wenn es
CustomObject
implementiert istComparable
, verwenden Sie es einfachCollections.sort(list)
Mit JDK 8 ist die Syntax viel einfacher.
Viel einfacher
Am einfachsten
Natürlich kann der ursprüngliche Code auch für JDK 8 verwendet werden.
quelle
Die Frage ist: "Sammlung sortieren". Sie können also nicht verwenden
Collections.sort(List<T> l, Comparator<? super T> comparator)
.Einige Hinweise:
Für Sammlungstyp:
Comparator<String> defaultComparator = new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }; Collection<String> collection = getSomeStringCollection(); String[] strings = collection.toArray(new String[collection.size()]); Arrays.sort(strings, defaultComparator); List<String> sortedStrings = Arrays.asList(strings); Collection<String> collection = getSomeStringCollection(); List<String> list = new ArrayList(collection); Collections.sort(list, defaultComparator); collection = list; // if you wish
Für Listentyp:
Für Set-Typ:
Set<String> set = getSomeStringSet(); // Than steps like in 'For Collection type' section or use java.util.TreeSet // TreeSet sample: // Sorted using java.lang.Comparable. Set<String> naturalSorted = new TreeSet(set); Set<String> set = getSomeStringSet(); Set<String> sortedSet = new TreeSet(defaultComparator); sortedSet.addAll(set);
Java 8 Version. Es gibt eine
java.util.List#sort(Comparator<? super E> c)
Methodeoder
oder für Typen, die Comparable implementieren:
quelle
Ein etwas anderes Beispiel besagt, dass Sie eine Klasse haben, die Comparable nicht implementiert, diese aber dennoch nach einem Feld oder einer Methode sortieren möchten.
Collections.sort(allMatching, new Comparator<ClassOne>() { @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; } });
quelle
compareTo()
bereits funktioniert.Sie sollten die
Comparator
Schnittstelle implementieren .Beispiel:
public class CustomComparator implements Comparator<CustomObject> { @Override public int compare(CustomObject o1, CustomObject o2) { return o1.getId().compareTo(o2.getId()); } }
Dann können Sie die Collections-Klassenmethode
Collections.sort()
verwenden:Collections.sort(list, new CustomComparator());
quelle
Implementieren Sie die vergleichbare Schnittstelle in Ihrem customObject.
quelle
Viele richtige Antworten, aber ich habe diese nicht gefunden: Sammlungen können nicht sortiert werden, Sie können sie nur durchlaufen.
Jetzt können Sie sie durchlaufen und eine neue Sortierung erstellen
something
. Folgen Sie dazu den Antworten hier.quelle
Comparator
ist die ArtSiehe auch
quelle
Ab Java 8 können Sie dies jetzt mit einem Stream mit einem Lambda tun:
quelle
Verwenden Sie sort .
Sie müssen nur Folgendes tun:
(Oder verwenden Sie die Version darunter, wie andere bereits gesagt haben.)
quelle
SortedSet und Komparator. Der Komparator sollte das ID- Feld berücksichtigen .
quelle
Mit Java 8 haben Sie mehrere Möglichkeiten, Methodenreferenzen und den integrierten
comparing
Komparator zu kombinieren :import static java.util.Comparator.comparing; Collection<CustomObject> list = new ArrayList<CustomObject>(); Collections.sort(list, comparing(CustomObject::getId)); //or list.sort(comparing(CustomObject::getId));
quelle
Sie können die benutzerdefinierte Java-Klasse zum Sortieren verwenden.
quelle
Sie können auch verwenden:
Collections.sort(list, new Comparator<CustomObject>() { public int compare(CustomObject obj1, CustomObject obj2) { return obj1.id - obj2.id; } }); System.out.println(list);
quelle
Um ganz klar zu sein, gibt Collection.sort (Liste, Kompartiment) nichts zurück, so dass so etwas
list = Collection.sort(list, compartor);
einen Fehler auslöst (void kann nicht in [ Listentyp ] konvertiert werden) und sollte es stattdessen seinCollection.sort(list, compartor)
quelle