У меня есть список объектов, которые я хочу отсортировать по дате с условием. Моя цель - получить список с возрастающей end_date, если end_date больше или равно, чем сегодня, а затем список, упорядоченный по убыванию start_date для объектов с end_date в прошлом.
У меня такая модель:
public class Trip implements Serializable, Comparable<Trip> {
public int id;
public Calendar date_begin, date_end;
}
И я пробовал это, но это не работает или работает слишком медленно.
@Override
public int compareTo(Trip trip) {
if (date_end.getTimeInMillis() < Calendar.getInstance().getTimeInMillis() &&
trip.date_end.getTimeInMillis() < Calendar.getInstance().getTimeInMillis()) {
return comparePast(trip);
} else if (date_end.getTimeInMillis() > Calendar.getInstance().getTimeInMillis() &&
trip.date_end.getTimeInMillis() > Calendar.getInstance().getTimeInMillis()) {
return compareCurrent(trip);
} else {
return date_end.compareTo(trip.date_end);
}
}
Есть ли самый простой или самый быстрый способ?
2 ответа
Что делает этот код таким медленным, так это многочисленные вызовы Calendar.getInstance()
для создания объектов Calendar. Код уже был бы намного быстрее, если бы вы вызывали это один раз для сравнения.
Однако нет особого смысла создавать их за один прогон сортировки. Вы можете установить статическую ссылку на Календарь, которую может использовать сортировка, или использовать System.currentTimeMillis
для получения текущего времени.
Основываясь на ответе wvdz, я, наконец, использую этот метод для сравнения:
@Override
public int compareTo(Trip trip) {
long now = System.currentTimeMillis();
if (trip.date_end.getTimeInMillis() > now && date_end.getTimeInMillis() > now) {
return date_begin.compareTo(trip.date_begin);
}
return trip.date_end.compareTo(date_end);
}
И это работает!
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.