У меня есть коллекция Java:
Collection<CustomObject> list = new ArrayList<CustomObject>();
CustomObject
теперь перед полем отображения есть поле id
. Я хочу сортировать эту коллекцию с помощью id
.
Можно ли мне это сделать?
У меня есть коллекция Java:
Collection<CustomObject> list = new ArrayList<CustomObject>();
CustomObject
теперь перед полем отображения есть поле id
. Я хочу сортировать эту коллекцию с помощью id
.
Можно ли мне это сделать?
Используйте Comparator:
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)
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:
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));
или для типов, которые реализуют Comparable:
List<String> list = getSomeStringList();
list.sort(String::compareTo);
Несколько другой пример говорит, что если у вас есть класс, который не реализует Comparable, но вы все же хотите отсортировать его по полю или методу.
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;
}
});
Внедрите Comparable интерфейс в свой customObject.
Вы должны реализовать интерфейс Comparator
.
Пример:
public class CustomComparator implements Comparator<CustomObject>
{
@Override
public int compare(CustomObject o1, CustomObject o2) {
return o1.getId().compareTo(o2.getId());
}
}
Затем вы можете использовать метод Collections Collections.sort()
:
Collections.sort(list, new CustomComparator());
Comparator
- это способ
Также см.
Начиная с Java 8 теперь вы можете сделать это с потоком, используя lambda:
list.stream().sorted(Comparator.comparing(customObject::getId))
.foreach(object -> System.out.println(object));
Используйте sort.
Вам просто нужно сделать это:
Все элементы в списке должны реализовывать интерфейс 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.
Вы можете использовать java Custom Class для сортировки.
Вы также можете использовать:
Collections.sort(list, new Comparator<CustomObject>() {
public int compare(CustomObject obj1, CustomObject obj2) {
return obj1.id - obj2.id;
}
});
System.out.println(list);