Java List 时间排序
在Java中对包含时间对象的List进行排序,有几种常见的方法,以下是几种实现方式:

使用Collections.sort()配合Comparator
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
public class DateSortExample {
public static void main(String[] args) {
List<Date> dateList = new ArrayList<>();
dateList.add(new Date()); // 当前时间
dateList.add(new Date(System.currentTimeMillis() - 86400000)); // 昨天
dateList.add(new Date(System.currentTimeMillis() + 86400000)); // 明天
// 升序排序(从早到晚)
Collections.sort(dateList);
System.out.println("升序排序:");
dateList.forEach(System.out::println);
// 降序排序(从晚到早)
dateList.sort(Comparator.reverseOrder());
System.out.println("\n降序排序:");
dateList.forEach(System.out::println);
}
}
使用Java 8 Stream API排序
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Java8DateSort {
public static void main(String[] args) {
List<LocalDate> dateList = new ArrayList<>();
dateList.add(LocalDate.now());
dateList.add(LocalDate.now().plusDays(1));
dateList.add(LocalDate.now().minusDays(1));
// 升序排序
dateList.sort(Comparator.naturalOrder());
System.out.println("升序排序:");
dateList.forEach(System.out::println);
// 降序排序
dateList.sort(Comparator.reverseOrder());
System.out.println("\n降序排序:");
dateList.forEach(System.out::println);
}
}
对自定义对象列表按日期字段排序
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
class Event {
private String name;
private LocalDate date;
public Event(String name, LocalDate date) {
this.name = name;
this.date = date;
}
public LocalDate getDate() {
return date;
}
@Override
public String toString() {
return name + " - " + date;
}
}
public class CustomObjectSort {
public static void main(String[] args) {
List<Event> events = new ArrayList<>();
events.add(new Event("会议", LocalDate.of(2025, 5, 15)));
events.add(new Event("培训", LocalDate.of(2025, 5, 10)));
events.add(new Event("项目启动", LocalDate.of(2025, 5, 20)));
// 按日期升序排序
events.sort(Comparator.comparing(Event::getDate));
System.out.println("按日期升序排序:");
events.forEach(System.out::println);
// 按日期降序排序
events.sort(Comparator.comparing(Event::getDate).reversed());
System.out.println("\n按日期降序排序:");
events.forEach(System.out::println);
}
}
使用第三方库(如Joda-Time或Java 8时间API)
对于更复杂的时间处理,可以使用Java 8的时间API或Joda-Time库:
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class LocalDateTimeSort {
public static void main(String[] args) {
List<LocalDateTime> dateTimeList = new ArrayList<>();
dateTimeList.add(LocalDateTime.now());
dateTimeList.add(LocalDateTime.now().plusHours(2));
dateTimeList.add(LocalDateTime.now().minusHours(1));
// 排序
dateTimeList.sort(Comparator.naturalOrder());
dateTimeList.forEach(System.out::println);
}
}
注意事项
- 对于旧版Java(Java 8之前),使用
Date类排序 - Java 8+推荐使用
LocalDate、LocalDateTime等新的时间API - 确保列表中的时间对象不为null,否则会抛出
NullPointerException - 对于自定义对象,确保日期字段不为null或提供null-safe的比较器
选择哪种方法取决于你的具体需求、Java版本以及是否需要处理时区等复杂情况。

