如何对月份和年份的列表进行排序

clo*_*her 2 java arrays time datetime date

我有一个包含年份的月份列表,例如:[12-2014,11-2012,5-2014,8-2012]并且我必须将它们排序为最近的在顶部(或最新的日期在顶部),例如。[12-2014,5-2014,11-2012,8-2012]
有人知道如何Java有效地做到这一点吗?

编辑:
该课程YearMonth不可用,我正在上课Java 7

Arv*_*ash 6

Java-8 及以上版本

Stream从列表中创建一个,将String每个映射StreamYearMonthusing a DateTimeFormatter,对Streamusing进行排序,将Stream 的Comparator#reverseOrder每个元素映射到using the same ,最后将其收集到 a 中。YearMonthStringDateTimeFormatterStreamList<String>

演示:

import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

public class Main {
    public static void main(String args[]) {
        List<String> list = List.of("12-2014", "11-2012", "5-2014", "8-2012");
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M-uuuu", Locale.ENGLISH);
        List<String> sorted = 
                list.stream()
                    .map(s -> YearMonth.parse(s, dtf))
                    .sorted(Comparator.reverseOrder())
                    .map(ym -> dtf.format(ym))
                    .collect(Collectors.toList());

        // Display the list
        System.out.println(sorted);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

[12-2014, 5-2014, 11-2012, 8-2012]
Run Code Online (Sandbox Code Playgroud)

ONLINE DEMO

Trail: Date Time了解有关现代日期时间 API *的更多信息。


* 如果您正在从事 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请通过 desugaring 检查可用的 Java 8+ API。请注意,Android 8.0 Oreo 已提供java.time.