【问题标题】:How to sort nested hashmaps?如何对嵌套的哈希图进行排序?
【发布时间】:2016-06-08 04:04:57
【问题描述】:

下面的hashmap 就像一个带有键值对字符串的表。 Integer分别代表行和列索引。

HashMap<Integer,HashMap<Integer,HashMap<String,String>>> fullMap = new HashMap<Integer,HashMap<Integer,HashMap<String,String>>>();

如何对最里面的 hashMap 进行排序?按key升序对行进行排序

未排序的输出:

.      0           1           2   
0  john,men     ace,his    hish,opt  
1  vrix,alt    home,jul     ics,ard  

排序后的输出:

.      0           1           2   
0   ace,his     john,men    hish,opt 
1  home,jul      ics,ard    vrix,alt 

【问题讨论】:

  • 您无法对哈希图进行排序。使用其他一些地图实现,例如树形图,然后应用自定义排序标准。
  • @僵尸。您可以在流式传输其值时对哈希图(或任何其他集合)进行排序。
  • @sprinter 嘿,谢谢,我不知道 java 8 的这个新接口。它返回一个以此集合作为源的顺序流,然后我们对流进行排序,但地图本身没有排序.如果我错了,请纠正我。

标签: java sorting collections hashmap


【解决方案1】:

我建议您在使用时对地图进行排序,而不是更改数据的存储方式。

如果我理解您的问题,您希望按键值对中的键进行排序。如果这是正确的,那么你可以这样做:

void processRow(Map<Integer,Map<String,String>> row) {
    row.entrySet().stream().sorted(Map.Entry.comparingByKey())
        .forEach(entry -> ...);
}

顺便说一句,您将数据结构类比为表格令人困惑。这是一个从 int 到 int 到 string 到 string 的映射。这可以表示一个表格,其中每个单元格都是键/值对列表。但那是一张很不寻常的桌子。

关系表的更传统表示形式类似于List&lt;Map&lt;Column,Value&gt;&gt;

【讨论】:

  • 我只想按字母顺序对每一行进行排序,比如未排序输出中显示的第 0 行键 john,ace,hish 将变为排序输出中显示的第 0 行 ace,john,hish跨度>
  • 好的,我会改变我的答案以匹配它
【解决方案2】:

可以使用 TreeMap 实现基于键的映射条目排序。创建 HashMap> 维护列格式。

Map<Integer, Map<String,String>> map = new HashMap<>();
Map<String, String> treeMap1 = new TreeMap<>();
treeMap1.put("john","men");
treeMap1.put("ace","his");
treeMap1.put("hish", "opt");
Map<String, String> treeMap2 = new TreeMap<>();
treeMap2.put("vrix","alt");
treeMap2.put("home","jul");
treeMap2.put("ics", "ard");
map.put(1, treeMap1);
map.put(2, treeMap2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多