java - 如何按季节和年份对字符串的 ArrayList 进行排序?
问题描述
我有一个未排序的季节和年份字符串数组列表,如下所示:
["Summer 2020", "Autumn 2018", "Spring 2019", "Autumn 2019", "Winter 2018", "Summer 2018", "Winter 2020", "Spring 2018"]
此列表的正确排序如下:
["Winter 2018", "Spring 2018", "Summer 2018", "Autumn 2018", "Spring 2019", "Autumn 2019", "Winter 2020", "Summer 2020"]
我怎样才能实现这个订单?一年中的季节顺序为 2021 年冬季、2021 年春季、2021 年夏季、2021 年秋季,并且每年的所有季节都不一定存在于列表中。
解决方案
您需要实现一个自定义Comparator
,先按年份排序,然后按季节排序。可enum
用于轻松指定季节的顺序。
private static class SeasonComparator implements Comparator<String> {
private enum Season {
WINTER, SPRING, SUMMER, AUTUMN
}
@Override
public int compare(String s1, String s2) {
String[] arr1 = s1.split(" ");
String[] arr2 = s2.split(" ");
int year1 = Integer.parseInt(arr1[1]);
int year2 = Integer.parseInt(arr2[1]);
if (year1 != year2) {
return year1 - year2;
} else {
Season season1 = Season.valueOf(arr1[0].toUpperCase());
Season season2 = Season.valueOf(arr2[0].toUpperCase());
return season1.ordinal() - season2.ordinal();
}
}
}
public static void main(String[] args) {
List<String> seasons = new ArrayList<>(Arrays.asList("Summer 2020", "Autumn 2018",
"Spring 2019", "Autumn 2019", "Winter 2018", "Summer 2018", "Winter 2020", "Spring 2018"));
System.out.println("Unordered list:");
System.out.println(seasons);
seasons.sort(new SeasonComparator());
System.out.println("Sorted list:");
System.out.println(seasons);
}
输出
Unordered list:
[Summer 2020, Autumn 2018, Spring 2019, Autumn 2019, Winter 2018, Summer 2018, Winter 2020, Spring 2018]
Sorted list:
[Winter 2018, Spring 2018, Summer 2018, Autumn 2018, Spring 2019, Autumn 2019, Winter 2020, Summer 2020]
推荐阅读
- javascript - 在jsfiddle中,运行时错误消息“error”:“key missing:title”是什么意思?
- reactjs - 尽管修改了临时对象数组而不是状态,但错误“在调度之间检测到状态突变”
- python - 在 spyder 中在线运行 Dropbox 中存在的 python 脚本(不在桌面中)
- python-3.x - 我是 Python 的首选学生,并且有一个关于链表的问题
- azure - Istio 侧车外置存储安装问题
- php - 从 3 个表中获取与具有 haMany 关系的一个表相关的数据
- python - 重新打包一个原来通过pip安装的修改库
- c# - 当文本框有焦点时,有没有办法让一些代码工作?
- python - Pandas:添加显示前一天、一周、一个月的值的列
- c# - 从 C# XML 函数返回字节 []