В Java у меня есть Set
, и я хочу превратить его в отсортированный List
. Есть ли метод в пакете java.util.Collections
, который будет делать это для меня?
Как отсортировать набор в списке на Java?
Ответ 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 = список, который будет возвращен