首页 > 解决方案 > LinkedHashMap 倒序到 LinkedHashMap 或 ArrayList

问题描述

我有一个LinkedHashMap<String,String>看起来像这样的东西(真的不知道如何说明 HashMap):

{
  "10/10/2010 10:10:10" => "SomeText1",
  "10/10/2019 10:10:19" => "SomeText2",
  "10/10/2020 10:10:20" => "SomeText3",
  "10/10/2021 10:10:21" => "SomeText4"
}

我想这样说:

{
  "10/10/2021 10:10:21" => "SomeText4",
  "10/10/2020 10:10:20" => "SomeText3",
  "10/10/2019 10:10:19" => "SomeText2",
  "10/10/2010 10:10:10" => "SomeText1"
}

我已经编写了这个可行的解决方案,因为我想要的结果是一个 ArrayList,但我在想是否有一种更简单的方法来反转 LinkedHashMap,使用诸如排序之类的工具维护相同的类型。

private LinkedHashMap<String, String> map = new LinkedHashMap<>();
int sizeOfHashMap = map.size();
ArrayList reversedHashToArrayList = new ArrayList(map.size());
   for (Map.Entry<String,String> entry : map.entrySet()) {
   String key = entry.getKey();
   String value = entry.getValue();

   reversedHashToArrayList.add(0,entry);
}

标签: javaandroidhashmaplinkedhashmap

解决方案


LinkedHashMap 按插入排序;按关联的日期时间排序会更合乎逻辑:

private SortedMap<LocalDateTime, String> map = new TreeMap<>(Comparator.naturalOrder()
                                                                       .reversed());

LocalDateTimeFormatter formatter = LocalDateTimeFormatter.ofPattern("MM/dd/uuuu HH:mm:ss");
map.put(LocalDateTime.parse("10/10/2010 10:10:10", formatter), "...");

要指定对地图进行排序,有接口 SortedMap。更好地使用更通用的界面。排序地图的实现类是 TreeMap。但是,您想要一个反向比较。

您可以使用本地特定模式。请注意,上面我选择了月/日,而不是英国日/月。


推荐阅读