【发布时间】:2022-12-05 05:47:47
【问题描述】:
任务: 给定数组
String[] dates = {
"07-05-1990",
"28-01-2010",
"11-08-1990",
"15-01-2010",
"16-06-1970"
};
我需要编写 Comparator 按以下顺序对该数组进行排序:
String[] expected = {
"16-06-1970",
"07-05-1990",
"11-08-1990",
"15-01-2010",
"28-01-2010"
};
我写了这段代码,但它不起作用:
import java.util.Comparator;
public class DateSort implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
if (str1.length() != 10 || str2.length() != 10) {
throw new IllegalArgumentException("The string must be 10 characters long.");
}
Comparator<String> strComparator = Comparator.comparing(s -> s.substring(6, 9))
.thenComparing(s -> s.subtring(3, 5))
.thenComparing(s -> s.subtring(0, 2));
return strComparator;
}
}
如何修复此代码以便根据任务对给定数组进行排序?
条件:只能使用比较器。不能使用日期和时间 API。我们需要使用 Comparator 比较数组中的字符串。我们无法将给定数组的字符串元素解析为日期。
【问题讨论】:
-
将字符串拆分为日/月/年,将它们解析为整数并进行比较,首先是年,然后是月,然后是日。
-
如果你想要这种方法,
Comparator.comparing(s -> s.substring(6, 9))应该是Comparator.comparing(s -> s.substring(6, 10))。我更喜欢:解析为LocalDate对象,排序并格式化回字符串。或者更好的是,始终使用LocalDate对象,并且仅在需要提供字符串输出时才格式化为字符串。 -
以什么方式不起作用?您观察到哪种不良结果?
标签: java arrays string compare comparator