首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinkedHashMap到LinkedHashMap或ArrayList的反向顺序

LinkedHashMap到LinkedHashMap或ArrayList的反向顺序
EN

Stack Overflow用户
提问于 2018-07-09 11:14:05
回答 4查看 3.7K关注 0票数 1

我有一个LinkedHashMap<String,String>,它看起来像这样(不知道如何演示HashMap):

代码语言:javascript
复制
{
  "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"
}

我想这样说:

代码语言:javascript
复制
{
  "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,例如使用sort这样的工具来维护相同的类型。

代码语言:javascript
复制
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);
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-09 11:32:06

LinkedHashMap通过插入命令;在关联的日期时间进行排序更符合逻辑:

代码语言:javascript
复制
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。但是你想要一个相反的比较。

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

票数 2
EN

Stack Overflow用户

发布于 2018-07-09 12:52:25

如果您的动机只是反转映射(按降序显示),则可以使用Java.util.TreeMap.descendingMap() :返回映射中包含的映射的反向顺序视图

代码语言:javascript
复制
LinkedHashMap<String,String> map = .... //this is your intial hashmap
TreeMap<String,String> tmap = new TreeMap<>(map);
map.clear();
map.putAll(tmap.descendingMap());

这就行了。

票数 2
EN

Stack Overflow用户

发布于 2018-07-09 11:25:21

这是我自己为你写的逻辑。在不使用任何内置函数的情况下逆转:

代码语言:javascript
复制
 LinkedHashMap<String, String> map = new LinkedHashMap<>();
    map.put("10/10/2010 10:10:10", "SomeText1");
    map.put("10/10/2019 10:10:19", "SomeText2");
    map.put("10/10/2020 10:10:20", "SomeText3");
    map.put("10/10/2021 10:10:21", "SomeText4");

    LinkedHashMap<String, String> reversed = new LinkedHashMap<>();

    String[] keys = map.keySet().toArray(new String[map.size()]);

    for (int i = keys.length - 1; i >= 0; i--) {
        reversed.put(keys[i], map.get(keys[i]));
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51244219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档