按日期排序
由于您的日期代表日期,因此更容易比较它们的是使用LocalDate 构建日期对象。
从List<String> o 到LocalDate:
List<String> o = List.of("2021", "04", "19");
LocalDate.of(Integer.parseInt(o.get(0)), Integer.parseInt(o.get(1)), Integer.parseInt(o.get(2)))
然后用List.sort应用这个逻辑
List<List<String>> values = Arrays.asList(List.of("2021", "04", "19"),
List.of("2021", "06", "22"), List.of("2021", "06", "24"));
values.sort((o1, o2) -> LocalDate.of(Integer.parseInt(o2.get(0)), Integer.parseInt(o2.get(1)), Integer.parseInt(o2.get(2)))
.compareTo(LocalDate.of(Integer.parseInt(o1.get(0)), Integer.parseInt(o1.get(1)), Integer.parseInt(o1.get(2)))));
System.out.println(values); // [[2021, 06, 24], [2021, 06, 22], [2021, 04, 19]]
您可以将解析器提取到方法中并使用Comparator.comparing
class DateSorter {
public static void main(String[] args) {
List<List<String>> values = Arrays.asList(List.of("2021", "04", "19"),
List.of("2021", "06", "22"), List.of("2021", "06", "24"));
values.sort(Comparator.comparing(DateSorter::toDate, Comparator.reverseOrder()));
System.out.println(values); // [[2021, 06, 24], [2021, 06, 22], [2021, 04, 19]]
}
static LocalDate toDate(List<String> o) {
return LocalDate.of(Integer.parseInt(o.get(0)), Integer.parseInt(o.get(1)), Integer.parseInt(o.get(2)));
}
}
按字符串排序
您也可以只对每个列表排序一个字符串,以防您的字符串是像 04 而不是 4 这样的双位数字符串
List<List<String>> values = Arrays.asList(List.of("2021", "04", "19"),
List.of("2021", "06", "22"), List.of("2021", "06", "24"));
values.sort(Comparator.comparing(List::toString, Comparator.reverseOrder()));
System.out.println(values); // [[2021, 06, 24], [2021, 06, 22], [2021, 04, 19]]