以自定义预定义顺序重新排列HashMap密钥

时间:2017-10-03 14:48:22

标签: java sorting hashmap

我有HashMap<String, String>我需要按特定顺序排序。 我理解HashMaps, 因为它们是如何构建的, 不能轻易排序。 然而, 我正在寻找在我的HashMap中重新排列键的最佳策略 - 例如我当前的HashMap看起来像这样:

"folioProperties": {
    "strategy": "Strategy",
    "summary": "Summary",
    "initiative": "Initiative",
    "deliveryMilestone": "Delivery Milestone",
    "onTarget": "On Target",
    "size": "Size",
    "driver": "Driver",
    "issueName": "Issue Name",
    "releaseWindow": "Release Window",
    "type": "Type",
    "targetQuarter": "Target Quarter"
}

我有一个表格视图,将每个属性显示为列,我需要按Strategy, Initiative, Issue Name, Summary, Delivery Milestone, On Target, Size, Target Quarter, Driver, Type, Release Window排序列/ hashmap。

任何建议都将不胜感激!

P.S。在构造HashMap之前,密钥位于List<String>

2 个答案:

答案 0 :(得分:4)

您似乎无法理解您尝试修复的问题。 hashmap是用于存储信息的工具。 您似乎从未真正需要对hashmap进行排序。 代替, 您似乎需要按特定顺序显示元素。

以下是以特定顺序从hashmap中检索元素的两种方法:

按所需顺序检索元素

blam = map.get("strategy");
... do something with blam.

blam = map.get("Initiative");
... do something with blam.

... repeat for all elements.

对键进行排序,然后按顺序检索

keyList.addAll(map.keySet());
Collections.sort(keyList, yourComparator);
for (final String current : keyList)
{
    blam = map.get(current);
    ... do something with blam.
}

停止将对象表示为Map

建立一个班级, 也许叫FolioProperties, 表示Folio的属性。

public class FolioPropertiesFND
{
    private String initiative;
    private String strategy;
    ... one field per property.

    public String getInitiative()
    {
        return initiative;
    }

    public void setInitiative(final String newValue)
    {
        initiative = newValue;
    }
}

答案 1 :(得分:0)

如果您的数据在地图构建之前位于有序列表中,那么您需要的是java.util.LinkedHashMap

来自javadoc的

  

Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。

     

此实现使其客户端免受HashMap(和Hashtable)提供的未指定的,通常混乱的排序,而不会导致与TreeMap相关的成本增加

如果您使用LinkedHashMap,那么您所要做的就是以正确的顺序放置键/值对,并且地图将确保为您提供相同的迭代顺序。