Java 在groovy中将LinkedHashMap强制转换为HashMap

Java 在groovy中将LinkedHashMap强制转换为HashMap,java,collections,groovy,hashmap,linkedhashmap,Java,Collections,Groovy,Hashmap,Linkedhashmap,如何在groovy中将LinkedHashMap转换为java.util.HashMap 当我在groovy中创建类似的东西时,它会自动创建一个LinkedHashMap,即使我像HashMap h=..或def HashMap h=.. 我试着做: HashMap h = ["key1":["val1", "val2"], "key2":["val3"]] 及 h.getClass().getName()仍然返回LinkedHashMapLinkedHashMap是HashMap的子类,因此

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

当我在groovy中创建类似的东西时,它会自动创建一个
LinkedHashMap
,即使我像
HashMap h=..
def HashMap h=..

我试着做:

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


h.getClass().getName()
仍然返回
LinkedHashMap
LinkedHashMap
HashMap
的子类,因此可以将其用作
HashMap


资源:

工作。使用[:]符号似乎将其与LinkedHashMap联系在一起。

简单的答案——地图有一些看起来很像复制构造函数的东西:

Map m = ['foo' : 'bar', 'baz' : 'quux'];
HashMap h = new HashMap(m);
因此,如果您坚持使用文字符号,但您必须有一个不同的实现,这就可以了


但真正的问题是,为什么您关心底层实现是什么?你甚至不应该在意它是一个HashMap。事实上,它实现了Map接口,这对于几乎任何目的来说都是足够的。

他可能被可怕的Groovy Map抓到了,就像我整个下午所做的那样,他在各种可能性中蹒跚而行

交易如下:

当使用变量字符串键时,您无法访问属性表示法格式的映射(例如map.a.b.c),这在Groovy中是意想不到的,因为Groovy中的一切通常都是简洁而美妙的;--)

解决方法是将变量键用括号而不是引号括起来

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免于暂时的疯狂…

只是好奇,为什么你会关心它创建了什么
Map
实现呢?我同意。我不应该管它使用什么HashMap实现。我遇到了同样的问题,我试图通过
assertEquals(“检查数据输入变量5/9-Define attr”,[“male”:0,“female”:1],var5.Define)比较assertEquals中的映射
断言失败,因为实际类型是
HashMap
,而预期类型是
LinkedHashMap
。也许我会编写自己的
assertMapEquals()
函数来使用您的建议。。。
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]]]