2012-03-08 71 views
1

我在这里有一个有趣的情况。我建立一个棋盘游戏和我有一个董事会宣布,为HashMap的访问来自嵌套HashMap的HashMap数据

HashMap<String, HashMap> board = new HashMap<String, HashMap>(); 

有在该主板的多个层,这就是为什么此HashMap必须采取其他HashMaps这样。

我们用瓦片对象填充此板,如下所示。

HashMap tileObject = new HashMap(); 
tileObject.put("key1", value1); 
tileObject.put("key2", value2); 
tileObject.put("name", value3); 

我们正在将此(和其他瓷砖)添加到电路板。

board.put((String)tileObject.get("name"), tileObject); 

所以这一切都很好,我们已经添加了瓷砖板。现在我的问题是,从这个董事会读。在分析板我有此代码段中的函数

HashMap takeTileObject = new HashMap(); 
takeTileObject.put("unique-coordinate", board.get("unique-coordinate"); 
// we are getting the values from board at key "unique-coordinate" 

什么,我需要做的是从takeTileObject访问键1/KEY 2 /名称。我试过这个

takeTileObject.get("unique-coordinate").(NOTHING HELPFUL HERE); 

我最想发生的事情就是这样的。

takeTileObject.get("unique-coordinate").get("key1"); 

这是可能的吗?

非常感谢您提前给予的帮助。

+0

它是什么类型的'value3' – 2012-03-08 06:40:12

+0

它变化。在代码中它有整数和字符串。名称本身是一个字符串,有x和y坐标是整数,一些状态效果是布尔值。 – 2012-03-08 06:44:53

回答

3

这是因为没有指定的takeTileObject

HashMap<String, HashMap> takeTileObject = new HashMap<String, HashMap>(); 

类型告诉系统,该值是HashMap对象,你应该可以称之为

takeTileObject.get("unique-coordinate").get("key1"); 
+0

就这样,我的救世主华尔兹在和拯救了一天:)。非常感谢!这工作完美。 – 2012-03-08 06:46:12

+0

...顺便说一下,Google收藏集代码中的MultiMap可能是实现地图映射的有用工具[http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/收集/ Multimap.html](http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multimap.html)。 – 2012-03-08 07:24:13

0

变化的部份一段代码

HashMap(String, HashMap> board = new HashMap<String, HashMap>(); 

HashMap<String, HashMap> board = new HashMap<String, HashMap>(); 
+0

我认为这是一个错字 – Hanon 2012-03-08 06:39:43

+0

是的,这只是一个错字,对不起:) – 2012-03-08 06:42:09