Java中按MM/dd/yy格式最近日期排序ArrayList问题求助
问题分析
你当前的排序逻辑是直接对日期字符串做字典序比较,这和日期的时间顺序逻辑不匹配。比如字符串"12/12/23"的首字符是'1',比"01/12/24"的首字符'0'大,所以字典序排序后"12/12/23"会排在前面,反转后依然不符合你的预期。
解决方案
需要将日期字符串解析为LocalDate对象(Java 8+日期API),基于日期的实际时间顺序排序,而非字符串的字典序。具体步骤:
- 定义对应
MM/dd/yy格式的DateTimeFormatter - 排序时将
Car的sold字符串解析为LocalDate,以此作为排序依据
修改后的代码如下:
import java.util.*; import java.util.stream.*; import java.time.LocalDate; import java.time.format.DateTimeFormatter; class Car{ String name; String sold; public Car(String name, String sold){ this.name = name; this.sold = sold; } public String getSold(){ return this.sold; } } public class MyClass { public static void main(String args[]) { // 定义MM/dd/yy格式的日期解析器 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/yy"); List<Car> list = new ArrayList<Car>(); list.add(new Car("bmw", "01/12/24")); list.add(new Car("jeep", "02/12/23")); list.add(new Car("audi", "12/12/23")); // 解析字符串为LocalDate后排序,反转实现降序 List<Car> sortedList = list.stream() .sorted(Comparator.comparing(car -> LocalDate.parse(car.getSold(), dateFormatter)).reversed()) .collect(Collectors.toList()); System.out.println("sorted "+ sortedList.get(0).sold); // 输出:sorted 01/12/24 } }
补充说明
LocalDate.parse()会按指定格式将字符串转为日期对象,确保排序基于实际时间先后- 如果需要处理非法日期格式的情况,可以在解析时添加try-catch逻辑,避免运行时抛出异常
内容的提问来源于stack exchange,提问作者krsna
相关产品推荐
相关产品推荐

