2013-07-10 13 views
1

例如,代碼是這樣的,它有點複雜,我如何使用谷歌的番石榴lib在這種情況下,並清理我的代碼?java。是否有任何谷歌的番石榴接口來取代地圖<字符串,地圖<字符串,字符串>>?例如,

@Test 
public void testMap2() { 
    Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>(); 
    addToMap(map, "cib", "1004", "2"); 
    addToMap(map, "cib", "1005", "3"); 
    addToMap(map, "cib", "1006", "1"); 
    addToMap(map, "cib", "1007", "5"); 

    addToMap(map, "icbc", "1004", "2"); 
    addToMap(map, "icbc", "1005", "3"); 
    addToMap(map, "icbc", "1006", "1"); 
    addToMap(map, "icbc", "1007", "5"); 
    System.out.println(map); 

} 

private void addToMap(Map<String, Map<String, String>> map, String key, String name, String value) { 
    if(map.containsKey(key)) { 
     map.get(key).put(name, value); 
    } else { 
     Map<String, String> map1 = new HashMap<String, String>(); 
     map1.put(name, value); 
     map.put(key, map1); 
    } 
} 

回答

13

是的,這就是所謂的Table

是相關聯的有序對鍵的集合,稱爲行鍵 和列密鑰,用一個單一的值。表格可能很稀疏, 只有一小部分具有 對應值的行鍵/列鍵對。
對應於給定行鍵的映射可能被看作是其鍵是列的映射。反過來也是 可用,將列與行鍵/值映射相關聯。請注意,在某些實現中,按列鍵進行的數據訪問可能比按行鍵進行的數據訪問所支持的操作更少或性能更差。

有幾個實現:

另請參見Wiki explaining Guava new collection types,具體的代碼示例:

Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create(); 
weightedGraph.put(v1, v2, 4); 
weightedGraph.put(v1, v3, 20); 
weightedGraph.put(v2, v3, 5); 

weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20 
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5 

這表明清潔的方式來實現你想要什麼。

P.S. Guava Wiki is your friend!

+0

謝謝,桌子確實是一個不錯的選擇。 – user2568800

相關問題