[英]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.
}
构建一个类,可能名为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.