0

如何在不将字符串转换为 Date 对象的情况下对 monthYear 列表进行排序?我无法在这里应用逻辑。

public class SortDates {

    public static void main(String[] args) {

        String[] monthName = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL",
                "AUG", "SEP", "OCT", "NOV", "DEC" };

        List<String> monthYear = new ArrayList<String>();

        monthYear.add("JAN-1999");
        monthYear.add("JUN-2009");
        monthYear.add("MAR-2003");
        monthYear.add("JAN-1998");
        monthYear.add("NOV-2013");

    }

}
4

3 回答 3

3

我将首先在枚举中描述月份:

enum Month{ JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };

然后您可以轻松实现自己的比较器:

public static class MyComparator implements Comparator<String>{
  @Override
  public int compare(String s1, String s2) {

    //If s1="JAN-1999", parts1[0]="JAN", parts1[1]="1999"
    String[] parts1=s1.split("-");
    //Month.valueOf("JAN") converts "JAN" to Month.JAN
    int m1 = Month.valueOf(parts1[0]).ordinal();
    int year1 = Integer.valueOf(parts1[1]);

    String[] parts2=s2.split("-");
    int m2 = Month.valueOf(parts2[0]).ordinal();
    int year2 = Integer.valueOf(parts2[1]);

    return ...//Here, compare year1 to year2 and if necessary, m1 and m2
    //You can also return (100*year2+m2) - (100*year1+m1)
  }
}

然后用它来排序:

Collections.sort(monthYear, new MyComparator());
于 2013-06-26T16:03:51.153 回答
2

您可以使用Collections.sort(List<T> list,Comparator<? super T> c)

并指定您自己的比较器来解析这些字符串。有关更多详细信息,请参阅文档

但是,我建议通过使用 解析它们来转换为日期SimpleDateFormat,并强烈建议将它们实际存储为日期,因为它们确实是这样。目前您的解决方案是字符串类型的 - 我更喜欢类型,因为您的编译器可以验证您在做什么。

于 2013-06-26T15:55:11.380 回答
0

用它们的数值映射月份怎么样?

HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("JAN", 1);
...

然后检查?

于 2013-06-26T16:13:47.170 回答