You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:32:21