如何对Java对象集合按YYYY/MM/DD格式的字符串日期字段排序
你可以直接在sort方法中传入自定义的Comparator实现,这里提供两种常用的实现方案:
方案1:直接利用字符串自然排序
该方案适用于能确定所有createDate严格符合YYYY/MM/DD格式的场景:
由于你的日期格式是年在前、月次之、日在后,且所有分段都是固定位数的数字,字符串的字典排序结果和日期先后顺序完全一致,可以直接按字段字符串排序:
// Java 8+ 简化写法 someObjectList.sort(Comparator.comparing(SomeObject::getCreateDate));
如果需要倒序排列,追加reversed()方法即可:
someObjectList.sort(Comparator.comparing(SomeObject::getCreateDate).reversed());
方案2:转换为LocalDate比较(更严谨)
如果存在日期格式可能不规范的场景,建议先转成日期类型再比较,避免异常排序结果:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; // 先定义和你格式匹配的日期格式化器 DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd"); someObjectList.sort((o1, o2) -> { LocalDate date1 = LocalDate.parse(o1.getCreateDate(), DATE_FORMATTER); LocalDate date2 = LocalDate.parse(o2.getCreateDate(), DATE_FORMATTER); return date1.compareTo(date2); });
需要倒序的话把返回值修改为date2.compareTo(date1)即可。
注意:你原代码中的类名
someobject不符合Java命名规范,建议调整为大驼峰格式的SomeObject,同时需要给createDate字段添加对应的getCreateDate()getter方法,否则Comparator无法读取字段值。
内容的提问来源于stack exchange,提问作者Marshall Munoz
相关产品推荐
相关产品推荐

