Java 从Clojure持久散列中获取未知密钥
从Clojure映射中获取未知密钥的最佳方法是什么?我试过这个-Java 从Clojure持久散列中获取未知密钥,java,clojure,clojure-java-interop,Java,Clojure,Clojure Java Interop,从Clojure映射中获取未知密钥的最佳方法是什么?我试过这个- (key {:a "test"}) 它抛出了这个- ClassCastException clojure.lang.PersistenArrayMap cannot be cast to java.util.Map$Entry 看看这些,这是有道理的- (defn key "Returns the key of the map entry." {:added "1.0" :static true} [^java.u
(key {:a "test"})
它抛出了这个-
ClassCastException clojure.lang.PersistenArrayMap cannot be cast to java.util.Map$Entry
看看这些,这是有道理的-
(defn key
"Returns the key of the map entry."
{:added "1.0" :static true}
[^java.util.Map$Entry e]
(. e (getKey)))
我也试过这个-
(key (java.util.Map$Entry. {:a "test"}))
它抛出了这个-
CompilerException java.lang.IllegalArgumentException: No matching ctor found for interface java.util.Map$Entry
我知道我可以调用键
,然后从KeySeq
中拉出所说的键
,但我想知道是否有一种简单的方法可以通过一个函数调用来实现这一点
这是在互操作方面。感谢您的输入。
(key(first{:a“test”}))
将获取地图中第一个条目的密钥,这就是您要做的吗?您可以使用key
或val
提取单个地图条目的密钥和值部分。对于您的问题,使用keys
函数(注意复数形式)从地图中按顺序获取所有键可能更容易:
(keys {:a "test"} )
;=> (:a)
(keys {:a "test" :b "again"} )
;=> (:a :b)
; please remember that the keys do not have to be keywords
(keys {1 11 2 22} )
;=> (1 2)
是的,我想是的。我想我很惊讶,
key
需要一个Java对象。谢谢您的输入。@nrako Clojure中的所有内容都是Java原语或Java对象。关键是key
采用的是映射条目,而不是映射。如果映射只包含一对,那么两个元素的向量可能会更好:[:a“test”]
,这很有帮助。我正在对照现有哈希检查传入哈希的每个键值,以查看该键值是否已经存在,因此在传入哈希上使用向量可能更简单。谢谢你的来信。