0

我有一个哈希图,它具有以下内容

{20/02/2012=20/02/2012, 16/02/2012=16/02/2012}但这是作为字符串(键和值)存在的。

请帮助我如何根据月份和日期对它们进行排序,

ex : 16/02/2012=16/02/2012,20/02/2012=20/02/2012

我可以接受任何建议。

谢谢

4

5 回答 5

1

您需要实现自定义比较器并将它们存储在TreeMap中。

例如(使用 joda-time):

 class MyComparator implements Comparator<String> {
      @Override
      public int compare(String value1, String value2) {
          LocalDate date1 = LocalDate.parse(value1, DateTimeFormat.forPattern("dd/MM/yyyy"));
          LocalDate date2 = LocalDate.parse(value2, DateTimeFormat.forPattern("dd/MM/yyyy"));
          return date1.compareTo(date2);
      }
 }


 TreeMap<String, String> treeMap = new TreeMap<String,String>();
 treeMap.put("20/02/2012", "20/02/2012");
 treeMap.put("16/02/2012","16/02/2012");
 System.out.println(treeMap);

但是你绝对应该在你的地图中存储日期而不是字符串,如果你不能改变它,使用上面的方法。

于 2012-08-24T10:05:00.840 回答
1

如果可能,将您的日期存储为 yyyy/MM/dd(例如 2012/02/16)并使用SortedSet

于 2012-08-24T10:05:31.393 回答
1
  1. 首先不要将日期存储为字符串,将它们存储为日期。
  2. 然后,您可以使用TreeMap自动为您排序日期(键)。
  3. 如果您的所有键都等于相应的值,您还可以使用TreeSet
于 2012-08-24T10:05:43.283 回答
1

正如大家所说,使用Date有序集合中的对象将使这更容易。使用从您的字符串转换为日期

new SimpleDateFormat("dd/MM/yyyy").parse(input);
于 2012-08-24T10:12:16.320 回答
1

我只是补充一点,HashMaps 不保留顺序,HashMaps 使用键的哈希码将条目放入数组中,因此您无法将其与任何类型的排序算法一起使用,您应该使用它的位置TreeMap 或任何其他 Sortable Map 实现

于 2012-08-24T10:26:57.943 回答