webentwicklung-frage-antwort-db.com.de

Wie sortiere ich ein Set in eine Liste in Java?

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?

163
Jeremy Stein

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

Sortiertes Set:

return new TreeSet(setIWantSorted);

oder:

return new ArrayList(new TreeSet(setIWantSorted));
73
Steve B.
List myList = new ArrayList(collection);
Collections.sort(myList);

… Sollte aber den Trick machen. Fügen Sie Geschmack mit Generika hinzu, wo zutreffend.

43
Esko

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());
38
nschum

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.

9

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);
}
5
Jeremy Stein

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

@ 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());
2
Deepak Kumbhar
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);

list.addAll(sortedset);

dabei ist originalset = unsortiertes Set und list = die Liste, die zurückgegeben werden soll

2
Sujith Mohan