Невозможно отсортировать данные с Comparator в Android - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь создать код для сортировки данных для моего списка в следующем порядке и знаю, что мне нужно использовать компаратор, однако я понятия не имею, как реализовать следующую логику в компараторе. Некоторая помощь или примеры будут великолепны! Я хотел бы услышать от вас.

final private ArrayList<BookItem> books = new ArrayList<>();

Collections.sort(books, compareBooks);

Способ сортировки списка следующим образом

Порядок отображения

  1. Чем ниже номер sort_order, будет показан элемент. Чем новее
  2. дата начала_даты, тем выше будет отображаться элемент
  3. Чем больше значение ID, тем элемент будет
private Comparator<BookItem> compareBooks = (o1, o2) -> {
    if (o1.sort_order == BookItem.ORDER && o2.sort_order != BookItem.ORDER) {
        return -1;
    } else if (o1.start_date != BookItem.START && o2.start_date == BookItem.START) {
        return 1;
    } else if (o1.ID == BookItem.ID && o2.ID == BookItem.ID) {
        return 0
    } 
};

1 Ответ

0 голосов
/ 18 апреля 2019

Я бы сделал это шаг за шагом, как в вашем списке атрибутов сортировки

  1. Чем ниже номер sort_order, будет показан элемент. Чем новее
  2. дата начала_даты, тем выше будет отображаться элемент
  3. Чем больше значение ID, тем элемент будет

а

 private Comparator<BookItem> compareBooks = (o1, o2) -> {
    int result =o1.sort_order - o2.sort_order
    if(0==result){
      result=o1.start_date.compareTo(o2.start_date);
    }
    if(0==result){
      result=o1.ID-o2.ID;
    }
 };

Скорее всего, я испортил порядок хотя бы одного из ваших атрибутов, но идея должна быть ясной.

...