如何对嵌套的哈希映射进行排序?

时间:2016-06-08 04:04:57

标签: java sorting collections hashmap

下面的Integer形成类似于具有键值对字符串的表格。 HashMap<Integer,HashMap<Integer,HashMap<String,String>>> fullMap = new HashMap<Integer,HashMap<Integer,HashMap<String,String>>>(); 分别代表行和列索引。

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

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

未排序的输出:

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

已排序的输出:

RewriteEngine on  

# To externally redirect /dir/foo.php to /dir/file.html
RewriteCond %{THE_REQUEST} \s/+(.+)\.php[\s?] [NC]
RewriteRule ^ /%1.html [R=301,L]

# To internally rewrite /dir/file.html to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+)\.html$ $1.php [L]

2 个答案:

答案 0 :(得分:3)

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

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

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

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

关系表的更常规表示形式类似于List<Map<Column,Value>>

答案 1 :(得分:2)

使用TreeMap可以实现基于键的地图条目排序。创建HashMap&lt;整数,TreeMap的&LT;字符串,字符串&gt;&gt;保持列格式。

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);