2016-11-06 4 views
1

У меня есть ArrayList объектов Foo(int id, Date date).java сортировать список по текущей дате затем по дате сравнению

Как бы я идти о сортировке этого ArrayList, чтобы выглядеть, как показано ниже

id = 3, date = 07 Nov 2016 
    id = 2, date = 08 Nov 2016 
    id = 5, date = 30 Nov 2016 
    id = 1, date = 05 Nov 2016 
    id = 4, date = 04 Nov 2016 

Тройку объекты в будущем отсортированные по ближайшим (по настоящее время) первый, нижний два в прошлом отсортированные по ближайшего (до настоящего времени).

+0

Это не дубликат. Это сложнее, чем просто сортировка по собственности. – janos

+0

И дубликат [* Как отсортировать список с использованием нескольких критериев сортировки *) (http://stackoverflow.com/q/3704804). ** Поиск переполнения стека ** перед публикацией. –

ответ

1

Для сортировки по нескольким критериям, вам необходимо композитный компаратор:

Collections.sort(dates, (d1, d2) -> { 
    if (d1.after(now) && d2.after(now)) { 
     return d1.compareTo(d2); 
    } 
    if (d1.before(now) && d2.before(now)) { 
     return -d1.compareTo(d2); 
    } 
    return -d1.compareTo(d2); 
}); 

То есть:

  • Если обе даты после того, как сейчас, сортировать их в обычном порядке (увеличение)
  • Если обе даты были до сих пор, сортируйте их в обратном порядке (уменьшая)
  • В противном случае (= одна дата до этого, другая - после), сортируйте их в обратном порядке (= более новая дата наступает f первая, старше приходит позже)
+0

Спасибо, что это правильно. –

1

Сортировать список по date, найти последний элемент с date менее today, перемещать элементы из первой найденному пункта к концу списка.

+0

Спасибо за ответ, я не совсем понял, что вы имели в виду. –

Смежные вопросы