2016-06-08 135 views
0

下面的hashmap表格就像一個包含鍵值對字符串的表格。 Integer分別表示行和列索引。如何排序嵌套hashmaps?

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

如何對最內側的hashMap進行排序?通過鍵升序

未排序的輸出排序行:

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

排序輸出:可使用TreeMap中實現基於鍵映射條目的

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

您無法對散列圖進行排序。使用一些其他像treemap一樣的map實現,然後應用自定義排序條件。 – zombie

+1

@殭屍。當您對其值進行流式處理時,您可以對散列圖(或任何其他集合)進行排序。 – sprinter

+0

@sprinter嗨,謝謝,我不知道java 8的這個新接口。它以這個集合作爲源返回一個順序流,然後我們對流進行排序,但是映射本身沒有排序。糾正我,如果我錯了。 – zombie

回答

2

我建議你在使用時對你的地圖進行排序而不是改變數據的存儲方式。

如果我理解您的問題,您希望按鍵值對中的鍵排序。如果這是正確的,那麼你可以這樣做:

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

順便說一句,你對你的數據結構表的類比是混亂的。它是從int到int的映射,字符串到字符串。這可以表示每個單元格是鍵/值對列表的表格。但這是一個非常不尋常的表格。

關係表的一個更傳統的表示將類似於List<Map<Column,Value>>

+0

我只想按字母順序對每一行進行排序,比如在未排序的輸出中顯示的第0行鍵約翰,王牌,hish將成爲第0行ace,john,hish,如排序輸出 – Dee

+0

好吧我會將我的答案更改爲匹配 – sprinter

2

排序。創建HashMap < Integer,TreeMap < String,String >>保留列格式。

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