关于Java:从Clojure Persistent Hash获取未知密钥

Get unknown key from Clojure Persistent Hash

从Clojure映射中获取未知密钥的最佳方法是什么? 我试过了-

1
(key {:a"test"})

这引发-

1
ClassCastException clojure.lang.PersistenArrayMap cannot be cast to java.util.Map$Entry

查看源代码,这很有意义-

1
2
3
4
5
(defn key
 "Returns the key of the map entry."
  {:added"1.0" :static true}
  [^java.util.Map$Entry e]
  (. e (getKey)))

我也尝试过

1
(key (java.util.Map$Entry. {:a"test"}))

哪个抛出这个-

1
CompilerException java.lang.IllegalArgumentException: No matching ctor found for interface java.util.Map$Entry

我知道可以调用keys,然后从KeySeq中拉出key,但是我很好奇是否有一种简单的方法可以通过一个函数调用来实现。

就互操作性而言,这是一个相关的问题。 感谢您的输入。


(key (first {:a"test"}))将为您提供地图中第一个条目的密钥,这就是您要执行的操作吗?


您可以使用keyval提取单个MapEntry的键和值部分。 对于您的问题,使用keys函数(请注意复数)可能会更容易地从映射中按顺序获取所有键:

1
2
3
4
5
6
7
8
9
(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)