在 Java 中对月份和年份进行排序的最有效方法

2024-03-28

我有一个列表,其中包含字符串格式的日期 (MON-YYYY),我需要对此列表进行排序。到目前为止我遵循的方法是读取列表并以日期格式转换字符串并使用比较选项,但是我我没有得到想要的结果

代码片段

List<String> abc = new ArrayList<String>();
        List<Date> xyz = new ArrayList<Date>();

        abc.add("JAN-2010");
        abc.add("JAN-2011");
        abc.add("APR-2013");
        abc.add("NOV-2009");

        try {

            for (String abc1 : abc) {

                Date date;

                date = new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH)
                        .parse(abc1);
                xyz.add(date);

            }

            Collections.sort(xyz, new Comparator<Date>() {

                public int compare(Date arg0, Date arg1) {
                    // return arg0.getDate().compareTo(o2.getDate());
                    return arg0.compareTo(arg1);
                }
            });

            for (Date date1 : xyz) {
                System.out.println("Sorted : " + date1);
            }

        } catch (ParseException e) {

            e.printStackTrace();

        }
    }

Output

    Sorted : Sun Nov 01 00:00:00 IST 2009
Sorted : Fri Jan 01 00:00:00 IST 2010
Sorted : Sat Jan 01 00:00:00 IST 2011
Sorted : Mon Apr 01 00:00:00 IST 2013

预期输出

NOV-2009
JAN-2010
JAN-2011
APR-2013

我也不确定上面的代码在性能方面是否完美,因为如果列表中有数千个 MON-YYYY 格式的日期,转换字符串和解析将花费很长时间。


好的,我看到您更正了拼写错误。

现在,请记住您需要使用DateFormatter除了解析数据之外,当您呈现数据时也是如此。

所以请尝试这个:

        for (Date date1 : xyz) {
            System.out.println("Sorted : " + new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH).format(date1));
        }

您可能想要使SimpleDateFormat作为字段可供类的所有方法使用。

附加信息:请注意SimpleDateFormat已知不是线程安全的。您可以使用ThreadLocal作为解决方案之一。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中对月份和年份进行排序的最有效方法 的相关文章

随机推荐