Сортировка массива объектов по алфавиту

Есть класс-модель 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));

// [Германия, Италия, Россия, Франция]
→ Ссылка