Как отсортировать набор в списке на Java?

В Java у меня есть Set, и я хочу превратить его в отсортированный List. Есть ли метод в пакете java.util.Collections, который будет делать это для меня?

Ответ 1

Ответ предоставленный OP, не самый лучший. Он неэффективен, так как он создает новый List и ненужный новый массив. Кроме того, он вызывает "непроверенные" предупреждения из-за проблем безопасности типа вокруг общих массивов.

Вместо этого используйте что-то вроде этого:

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

Вот пример использования:

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

Ответ 2

Отсортировано:

return new TreeSet(setIWantSorted);

или

return new ArrayList(new TreeSet(setIWantSorted));

Ответ 3

List myList = new ArrayList(collection);
Collections.sort(myList);

... должен делать трюк. Добавьте аромат с помощью Generics, где это применимо.

Ответ 4

Здесь вы можете сделать это с помощью потоков Java 8:

mySet.stream().sorted().collect(Collectors.toList());

или с помощью специального компаратора:

mySet.stream().sorted(myComparator).collect(Collectors.toList());

Ответ 5

Всегда безопасно использовать интерфейс Comparator или Comparable для реализации реализации сортировки (если объект не является классами String или Wrapper для примитивных типов данных). В качестве примера реализации компаратора для сортировки сотрудников на основе имени

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

Компаратор полезен, когда вам нужен другой алгоритм сортировки на одном объекте (имя emp, emp зарплата и т.д.). Сортировка одного режима может быть реализована с помощью интерфейса Comparable в требуемом объекте.

Ответ 6

Нет единого метода для этого. Используйте это:

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

Ответ 7

Вы можете преобразовать набор в ArrayList, где вы можете сортировать ArrayList с помощью Collections.sort(List).

Вот код:

keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);     
Collections.sort(list);

Ответ 8

TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);

list.addAll(sortedset);

где originalset = unsorted set и list = список, который будет возвращен