In Java habe ich ein Set
und möchte es in ein sortiertes List
umwandeln. Gibt es eine Methode in der Java.util.Collections
Paket, das dies für mich tun wird?
Die Antwort vom OP bereitgestellt ist nicht die beste. Es ist ineffizient, da es ein neues List
und unnötiges neues Array erstellt. Außerdem werden "ungeprüfte" Warnungen wegen der Typensicherheitsprobleme bei generischen Arrays ausgegeben.
Verwenden Sie stattdessen Folgendes:
public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
List<T> list = new ArrayList<T>(c);
Java.util.Collections.sort(list);
return list;
}
Hier ist ein Anwendungsbeispiel:
Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);
Sortiertes Set:
return new TreeSet(setIWantSorted);
oder:
return new ArrayList(new TreeSet(setIWantSorted));
List myList = new ArrayList(collection);
Collections.sort(myList);
… Sollte aber den Trick machen. Fügen Sie Geschmack mit Generika hinzu, wo zutreffend.
Hier ist, wie Sie es mit den Streams von Java 8) machen können:
mySet.stream().sorted().collect(Collectors.toList());
oder mit einem benutzerdefinierten Komparator:
mySet.stream().sorted(myComparator).collect(Collectors.toList());
Die Verwendung der Schnittstelle Comparator oder Comparable zur Bereitstellung der Sortierimplementierung ist immer sicher (wenn das Objekt keine String- oder Wrapper-Klasse für primitive Datentypen ist). Als Beispiel für eine Komparator-Implementierung zum Sortieren von Mitarbeitern nach Namen
List<Employees> empList = new LinkedList<Employees>(EmpSet);
class EmployeeComparator implements Comparator<Employee> {
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
}
Collections.sort(empList , new EmployeeComparator ());
Comparator ist nützlich, wenn Sie für dasselbe Objekt einen anderen Sortieralgorithmus benötigen (z. B. den Namen des Mitarbeiters, das Gehalt des Mitarbeiters usw.). Single-Mode-Sortierung kann mithilfe der Schnittstelle Comparable für das gewünschte Objekt implementiert werden.
Es gibt keine einzige Methode, um das zu tun. Benutze das:
@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
T[] array = collection.toArray(
(T[])new Comparable[collection.size()]);
Arrays.sort(array);
return Arrays.asList(array);
}
Sie können eine Menge in eine ArrayList
konvertieren, in der Sie die ArrayList
mit Collections.sort(List)
sortieren können.
Hier ist der Code:
keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);
Collections.sort(list);
@ Jeremy Stein Ich wollte den gleichen Code implementieren. Außerdem wollte ich die Liste der zu sortierenden Mengen sortieren. Anstatt Set zu verwenden, konvertierte ich Set-Werte in List und sortierte diese Liste nach einer der Variablen. Dieser Code hat mir geholfen,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
dabei ist originalset = unsortiertes Set und list = die Liste, die zurückgegeben werden soll