繁体   English   中英

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

[英]Re-arrange HashMap keys in custom pre-defined order

我有一个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进行排序。

任何建议,将不胜感激!

PS构造HashMap之前,键位于List<String>

您似乎无法理解您尝试修复的问题。 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;
    }
}

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

来自javadoc:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM