将LinkedHashMap强制转换为groovy中的HashMap

时间:2010-09-23 17:24:34

标签: java collections groovy hashmap linkedhashmap

如何在groovy中将LinkedHashMap转换为java.util.HashMap

当我在groovy中创建这样的内容时,即使我将其声明为LinkedHashMapHashMap h = ....

,它也会自动创建def HashMap h = ...

我尝试过:

HashMap h = ["key1":["val1", "val2"], "key2":["val3"]]

def HashMap h = ["key1":["val1", "val2"], "key2":["val3"]]

h.getClass().getName()仍然带有LinkedHashMap

4 个答案:

答案 0 :(得分:5)

LinkedHashMapHashMap的子类,因此您可以将其用作HashMap


资源:

答案 1 :(得分:3)

简单回答 - 地图的内容看起来很像复制构造函数:

Map m = ['foo' : 'bar', 'baz' : 'quux'];
HashMap h = new HashMap(m);

所以,如果你坚持使用文字符号,但你必须有不同的实现,这将完成这项工作。

但真正的问题是,为什么你关心底层实现是什么?你甚至不应该关心它是一个HashMap。它实现Map接口的事实应该足以满足任何目的。

答案 2 :(得分:2)

他可能被可怕的Groovy-Map-Gotcha抓住了,并且在整个下午的旷野中磕磕绊绊。

这是交易:

使用变量字符串键时,您无法以属性表示法格式访问地图(例如map.a.b.c),这是Groovy中出乎意料的事情,其中​​一切都很简洁明了; - )

解决方法是将变量键包装在parens中而不是引号中。

def(a,b,c) = ['foo','bar','baz']  
Map m = [(a):[(b):[(c):1]]]  
println m."$a"."$b"."$c" // 1  
println m.foo.bar.baz // also 1

如此创建地图将为全世界的虐待狂带来极大的乐趣:

Map m = ["$a":["$b":["$c":1]]]

希望这可以从临时疯狂中拯救另一个Groovy-ist ......

答案 3 :(得分:1)

 HashMap h = new HashMap() 
 h.getClass().getName();

的工作原理。使用[:]表示法似乎将它绑定到LinkedHashMap。