Сортировка массива объектов по алфавиту
Есть класс-модель CountryModel. У него есть 2 поля: id и title.
public class CountryModel {
private int id;
private String title;
public CountryModel(int id, String title) {
this.id = id;
this.title = title;
}
public int getId() {
return id;
}
public String getTitle() {
return title;
}
}
Я создал список models типа CountryModel, чтобы вывести на экран список стран.
public CountryModelsAdapter() {
List<CountryModel> models = new ArrayList<>();
models.add(new CountryModel(TYPE_RUSSIA, "Россия"));
models.add(new CountryModel(TYPE_GERMANY, "Германия"));
models.add(new CountryModel(TYPE_FRANCE, "Франция"));
models.add(new CountryModel(TYPE_ITALY, "Италия"));
setModels(models);
}
Как отсортировать список models по полю title, чтобы страны на экране показывались в алфавитном порядке (Германия-Италия-Россия-Франция) ?
Ответы (2 шт):
Автор решения: Alex_Skvortsov
→ Ссылка
Через интерфейс Comparable:
public class CountryModel implements Comparable<CountryModel> {
...
public int compareTo(CountryModel other) {
return getTitle().compareTo(other.getTitle());
}
}
Также можно использовать Comparator
Comparator<CountryModel> countryModelsComparator
= Comparator.comparing(CountryModel::getTitle);
Collections.sort(models, countryModelsComparator);
Автор решения: Drakonoved
→ Ссылка
Вывод листа, отсортированного по полю типа String в алфавитном порядке, на стримах:
CountryModel:
public class CountryModel {
. . .
// вот этот метод сюда добавляем
public void printTitle() {
System.out.println(this.title);
}
}
models (без изменений):
List<CountryModel> models = new ArrayList<>();
models.add(new CountryModel(TYPE_RUSSIA, "Россия"));
models.add(new CountryModel(TYPE_GERMANY, "Германия"));
models.add(new CountryModel(TYPE_FRANCE, "Франция"));
models.add(new CountryModel(TYPE_ITALY, "Италия"));
Stream:
models.stream()
.sorted(Comparator.comparing(CountryModel::getTitle))
.forEach(CountryModel::printTitle);
// Германия
// Италия
// Россия
// Франция
Вывод листа, отсортированного по полю типа String в алфавитном порядке, с помощью метода sort класса ArrayList:
CountryModel:
public class CountryModel {
. . .
// вот этот метод сюда добавляем
@Override
public String toString() {
return this.title;
}
}
models.sort:
models.sort(Comparator.comparing(CountryModel::getTitle));
System.out.println(models.toString());
// [Германия, Италия, Россия, Франция]
Arrays.sort: (на закуску)
CountryModel[] modelsArr = models.toArray(new CountryModel[4]);
Arrays.sort(modelsArr, Comparator.comparing(CountryModel::getTitle));
System.out.println(Arrays.toString(modelsArr));
// [Германия, Италия, Россия, Франция]