В Java у меня есть Set
, и я хочу превратить его в отсортированный List
. Есть ли способ в пакете java.util.Collections
, который сделает это для меня?Как отсортировать набор в списке на Java?
ответ
Ответ provided by the 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);
Нет единого метода для этого. Используйте:
@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);
}
Существует также функция Collections.sort, но я думаю, что он делает то же самое.+1 в любом случае. – CookieOfFortune
Collections.sort принимает список в качестве параметра. –
отсортированного набора:
return new TreeSet(setIWantSorted);
или:
return new ArrayList(new TreeSet(setIWantSorted));
Это была моя первая мысль, но искателю нужен Список –
@Alex: этот подход все еще можно использовать; return new ArrayList (новый TreeSet (setIWantSorted)) – Jonik
Я действительно использовал это решение, но я бы не советовал это. Поскольку в документации по TreeSet говорится (см. Http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeSet.html), он эффективно использует метод compareTo() вместо equals (), поэтому, если у вас есть два объекта в наборе, которые имеют одинаковый результат equals(), они будут рассматриваться как дубликаты и, как таковые, не будут добавлены в TreeSet. Осторожно. – fwielstra
List myList = new ArrayList(collection);
Collections.sort(myList);
... должен сделать трюк, однако. Добавьте ароматизатор с помощью Generics, где это применимо.
У меня был полезный фрагмент, который я хотел пожертвовать сообществу. Когда я искал информацию, я не мог ее найти. Я пытался облегчить работу следующего человека. http://stackoverflow.com/questions/18557/how-does-stackoverflow-work-the-unofficial-faq#119658 –
Да, конечно, но эта ссылка, которую вы предоставили, фактически говорит о _real_ вопросах (то есть о у которых нет ответа, затем найдите его). Твой вопрос здесь был только для того, чтобы дать ответ ... Я мог бы на самом деле ввести сотни вопросов и ответить самому себе; не в этом дело! – Seb
@ Seb: Я не согласен. Я не вижу ничего плохого в этом вопросе. Очевидно, это был не очень простой вопрос, и теперь он знает лучший способ, чем раньше! –
Вы можете преобразовать набор в ArrayList
, где вы можете сортировать ArrayList
с помощью Collections.sort(List)
.
Вот код:
keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);
Collections.sort(list);
Как это отличается от принятого ответа? – Tim
Всегда безопасно использовать как компаратор или Сопоставимый интерфейс для сортировки реализации (если объект не является строка или классы-оболочки для примитивных типов данных). В качестве примера реализации компаратора для сортировки сотрудников на основе имени
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());
Компаратор полезен, когда вам нужно иметь другой алгоритм сортировки на одном объекте (Say имени ого, ая зарплату и т.д.). Сортировка одного режима может быть реализована с использованием интерфейса Comparable в требуемом объекте.
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
где originalset = несортированный набор и список = список должен быть возвращен
Вот как вы можете сделать это с Java 8 в Streams:
mySet.stream().sorted().collect(Collectors.toList());
или с помощью пользовательского компаратор:
mySet.stream().sorted(myComparator).collect(Collectors.toList());
@Jeremy Stein Я хотел реализовать тот же код. Кроме того, я хотел отсортировать список для списка. Поэтому вместо того, чтобы использовать Set, я преобразовал заданные значения в List и сортировал этот список по одной переменной. Этот код помог мне,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());
- 1. Как отсортировать набор пар?
- 2. Как отсортировать набор, основанный на свойстве объекта?
- 3. Как отсортировать элементы в списке
- 4. Как отсортировать даты в списке
- 5. Как отсортировать элементы в списке
- 6. как отсортировать набор <T> в java
- 7. Как отсортировать набор карт внутри другой карты в java?
- 8. как отсортировать набор данных в PHP?
- 9. Как отсортировать ArrayList в Java
- 10. как отсортировать элементы в списке в R?
- 11. Как отсортировать очередь на месте в java?
- 12. Как отсортировать контакты телефона в списке?
- 13. Как отсортировать первую строку в списке
- 14. Python: как отсортировать случайные числа в списке
- 15. Python: как отсортировать количество элементов в списке?
- 16. Python Как отсортировать список в списке
- 17. как отсортировать список кортежей в списке?
- 18. Как отсортировать набор по разыменованным значениям?
- 19. Как отсортировать HashMap в Java
- 20. Как отсортировать мой UITableViewCells на основе дат в списке свойств?
- 21. Как отсортировать элементы jComboBox в java swing?
- 22. Как отсортировать hasmap в java?
- 23. Как отсортировать массив в java?
- 24. Как отсортировать список в Java?
- 25. Как отсортировать массив в Java?
- 26. Как отсортировать результирующий набор activerecord на переводимом столбце i18n?
- 27. Как отсортировать набор результатов XML на основе значения ставки?
- 28. Как отсортировать массив списка объектов В java?
- 29. Как отсортировать список объектов на основе списка объектов в другом списке/главном списке на C#?
- 30. Java - Как отсортировать этот ArrayList?
Спасибо! Это SuppressWarnings всегда беспокоило меня. –
@erickson, где я должен найти класс Util, я имею в виду, из какого пакета. Пожалуйста, помогите мне. – sunleo
@sunleo Класс 'Util' - это тот, который содержит метод' asSortedList() ', который я написал. Другими словами, вы сами пишете класс 'Util' и помещаете в него этот код. – erickson