Сортировка Коллекции В Java
у меня есть коллекция Java:
Collection<CustomObject> list = new ArrayList<CustomObject>();
CustomObject
есть id
поле теперь перед отображением списка я хочу отсортировать эту коллекцию по этому id
.
есть ли способ я могу это сделать?
13 ответов:
использовать компаратор:
List<CustomObject> list = new ArrayList<CustomObject>(); Comparator<CustomObject> comparator = new Comparator<CustomObject>() { @Override public int compare(CustomObject left, CustomObject right) { return left.getId() - right.getId(); // use your logic } }; Collections.sort(list, comparator); // use the comparator as much as u want System.out.println(list);
кроме того, если
CustomObject
осуществляетComparable
, затем просто использоватьCollections.sort(list)
С JDK 8 синтаксис намного проще.
List<CustomObject> list = getCustomObjectList(); Collections.sort(list, (left, right) -> left.getId() - right.getId()); System.out.println(list);
гораздо проще
List<CustomObject> list = getCustomObjectList(); list.sort((left, right) -> left.getId() - right.getId()); System.out.println(list);
простой
List<CustomObject> list = getCustomObjectList(); list.sort(Comparator.comparing(CustomObject::getId)); System.out.println(list);
очевидно, что исходный код может быть использован и для JDK 8.
вопрос: "сортировка коллекции". Так что вы не можете использовать
Collections.sort(List<T> l, Comparator<? super T> comparator)
.несколько советов:
для типа коллекции:
Comparator<String> defaultComparator = new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }; Collection<String> collection = getSomeStringCollection(); String[] strings = collection.toArray(new String[collection.size()]); Arrays.sort(strings, defaultComparator); List<String> sortedStrings = Arrays.asList(strings); Collection<String> collection = getSomeStringCollection(); List<String> list = new ArrayList(collection); Collections.sort(list, defaultComparator); collection = list; // if you wish
тип списка:
List<String> list = getSomeStringList(); Collections.sort(list, defaultComparator);
для установлен типа:
Set<String> set = getSomeStringSet(); // Than steps like in 'For Collection type' section or use java.util.TreeSet // TreeSet sample: // Sorted using java.lang.Comparable. Set<String> naturalSorted = new TreeSet(set); Set<String> set = getSomeStringSet(); Set<String> sortedSet = new TreeSet(defaultComparator); sortedSet.addAll(set);
версия Java 8. Есть
java.util.List#sort(Comparator<? super E> c)
методList<String> list = getSomeStringList(); list.sort(defaultComparator);
или
List<String> list = getSomeStringList(); list.sort((String o1, String o2) -> o1.compareTo(o2));
или для типов, которые реализуют сопоставимые:
List<String> list = getSomeStringList(); list.sort(String::compareTo);
немного другой пример, скажем, если у вас есть класс, который не реализует сопоставимых, но вы все еще хотите отсортировать его по полю или методу.
Collections.sort(allMatching, new Comparator<ClassOne>() { @Override public int compare(final ClassOne o1, final ClassOne o2) { if (o1.getMethodToSort() > o2.getMethodToSort()) { return 1; } else if (o1.getMethodToSort() < o2.getMethodToSort()) { return -1; } return 0; } });
вы должны использовать тег
Comparator
интерфейс.пример:
public class CustomComparator implements Comparator<CustomObject> { @Override public int compare(CustomObject o1, CustomObject o2) { return o1.getId().compareTo(o2.getId()); } }
затем вы можете использовать классы коллекций
Collections.sort()
способ:Collections.sort(list, new CustomComparator());
реализовать сопоставимо интерфейс на вашем customObject.
Comparator
путьСм. Также
С Java 8 Теперь вы можете сделать это с помощью лямбда-выражения:
list.stream().sorted(Comparator.comparing(customObject::getId)) .foreach(object -> System.out.println(object));
использовать вроде.
вы просто должны сделать это:
все элементы в списке должны реализовать comparable интерфейс.
(или используйте версию ниже, как уже говорили другие.)
много правильных ответов, но я не нашел этот: Коллекции не могут быть отсортированы, вы можете только перебирать их.
теперь вы можете перебирать их и создавать новый сортированный
something
. Следуйте ответам здесь для этого.
С Java 8 у вас есть несколько вариантов, сочетающих ссылки на методы и встроенный
comparing
компаратор:import static java.util.Comparator.comparing; Collection<CustomObject> list = new ArrayList<CustomObject>(); Collections.sort(list, comparing(CustomObject::getId)); //or list.sort(comparing(CustomObject::getId));
SortedSet и компаратор. Компаратор должен соблюдать id