Java 在groovy中将LinkedHashMap强制转换为HashMap
如何在groovy中将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的子类,因此
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
资源:
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]]]