我有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>
。
答案 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.
}
建立一个班级, 也许叫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
:
Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。
此实现使其客户端免受HashMap(和Hashtable)提供的未指定的,通常混乱的排序,而不会导致与TreeMap相关的成本增加
如果您使用LinkedHashMap,那么您所要做的就是以正确的顺序放置键/值对,并且地图将确保为您提供相同的迭代顺序。