Сортировка пользовательских объектов в Java — Comparator и Comparable
Чтобы понять этот пример, нужно знать следующие темы:
Классы и объекты Java
ArrayList в Java
Пример: Сортировка ArrayList пользовательских объектов по свойству
import java.util.*;
public class CustomObject {
private String customProperty;
public CustomObject(String property) {
this.customProperty = property;
}
public String getCustomProperty() {
return this.customProperty;
}
public static void main(String[] args) {
ArrayList<Customobject> list = new ArrayList<>();
list.add(new CustomObject("Z"));
list.add(new CustomObject("A"));
list.add(new CustomObject("B"));
list.add(new CustomObject("X"));
list.add(new CustomObject("Aa"));
list.sort((o1, o2) -> o1.getCustomProperty().compareTo(o2.getCustomProperty()));
for (CustomObject obj : list) {
System.out.println(obj.getCustomProperty());
}
}
}
Вывод:
A
Aa
B
X
Z
В программе выше мы определили класс CustomObject со свойством типа String — customProperty.
Мы также добавили конструктор, который инициализирует свойство, и геттер getCustomProperty(), который возвращает customProperty.
В методе main() мы создали список пользовательских объектов list, инициализированный 5 объектами.
Чтобы отсортировать список по заданному свойству, мы используем метод sort() списка. Метод sort() принимает список для сортировки (итоговый отсортированный список — тот же самый) и comparator.
В нашем случае компаратор — это лямбда, которая:
принимает два объекта из списка o1 и o2,
сравнивает свойство customProperty двух объектов с помощью метода
compareTo(),и наконец возвращает положительное число, если свойство o1 больше, чем у o2, отрицательное, если свойство o1 меньше, чем у o2, и ноль, если они равны.
На основе этого list сортируется от наименьшего свойства к наибольшему и сохраняется обратно в list.
Примечание
Для int мы используем Comparator.comparingInt(CustomObject::getCustomProperty) для сортировки ArrayList по int-свойству.