Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure中使用Java哈希映射_Clojure_Clojure Java Interop - Fatal编程技术网

在Clojure中使用Java哈希映射

在Clojure中使用Java哈希映射,clojure,clojure-java-interop,Clojure,Clojure Java Interop,我对Clojure不熟悉。我试图在clojure中使用java hashmap。我正在将java hashmap传递给Clojure。地图是-{0=果阿,1=德里,2=孟买}。当我试图在这个映射上使用clojure函数时,我没有得到预期的输出。与此相反,当我在这个映射上迭代时,它给出了预期的输出 Example (println(get map 0)) is giving nil (doseq [[key value] map (println value)) is g

我对Clojure不熟悉。我试图在clojure中使用java hashmap。我正在将java hashmap传递给Clojure。地图是-{0=果阿,1=德里,2=孟买}。当我试图在这个映射上使用clojure函数时,我没有得到预期的输出。与此相反,当我在这个映射上迭代时,它给出了预期的输出

Example
   (println(get map 0)) is giving nil




(doseq [[key value] map
      (println value)) is giving the expected output.

        Output-Goa
               Delhi
               Mumbai

有人能解释一下为什么会发生这种情况吗?

我想你的问题是你的地图被命名为“地图”,这也是一个Clojure函数。试着这样做:

(def my-map {0 "Goa" 1 "Delhi" 2 "Mumbai"})
(println (get my-map 0))
然后它会像这样工作:

(def my-map {0 "Goa" 1 "Delhi" 2 "Mumbai"})
(println (get my-map 0))

请注意,它仍然返回nil,因为在(println)表单之后没有其他内容,但它会打印地图中0的值,即“Goa”。

您确实应该通过谷歌搜索一下,以找到像这样的预先存在的答案:

然后您可以看到一个简单的答案:

(def data {:a 1 :b 2 :c 3})

(def java-map (java.util.HashMap. data))
(def clj-map  (into {} java-map))
这给了我们:

java-map  => <#java.util.HashMap {:b 2, :c 3, :a 1}>
clj-map   => <#clojure.lang.PersistentArrayMap {:b 2, :c 3, :a 1}>
结果:

key=:b  val=2
key=:c  val=3
key=:a  val=1
[[k v]]for函数允许您访问每个条目的键和值

(map print input-map)

此处地图条目将作为打印参数传递

请注意如何标记您的问题。如果您的问题与此无关,那么吸引Java专家来回答您的问题并不会对您有所帮助。虽然您确实不应该使用
map
作为映射的名称,但如果您在REPL上尝试使用它,您应该只会得到一条警告,如
warning:map已经引用:"clojure.core/map in namespace:user,替换为:#“用户/map
。如果您天真地尝试使用正常的Clojure
map
函数,则会导致奇怪的行为,但不会导致此处描述的特定问题。@BenSchmidt感谢您的澄清。我不完全清楚他的“地图”是从哪里来的,因为原始问题中缺少了代码的这一部分。