gpt4 book ai didi

Clojure:以惯用的 Clojure 方式使用 java.util.HashMap

转载 作者:行者123 更新时间:2023-12-03 10:09:01 25 4
gpt4 key购买 nike

我有一个 java.util.HashMap对象 m (调用 Java 代码的返回值),我想获得一个带有附加键值对的新映射。

m是 Clojure map ,我可以使用:

(assoc m "key" "value")

但是在 HashMap 上尝试给出:

java.lang.ClassCastException: java.util.HashMap cannot be cast to clojure.lang.Associative



运气不好 seq任何一个:
(assoc (seq m) "key" "value")

java.lang.ClassCastException: clojure.lang.IteratorSeq cannot be cast to clojure.lang.Associative



我设法做到的唯一方法是使用 HashMap自己的 put ,但返回 void所以我必须明确返回 m :
(do (. m put "key" "value") m)

这不是惯用的 Clojure 代码,而且我正在修改 m而不是创建新 map 。

如何使用 HashMap以更接近 Clojure 的方式?

最佳答案

Clojure 使 java Collections 具有 seq 能力,因此您可以直接在 java.util.HashMap 上使用 Clojure 序列函数。

但是 assoc 需要 clojure.lang.Associative 所以你必须首先将 java.util.HashMap 转换为:

(assoc (zipmap (.keySet m) (.values m)) "key" "value")

编辑:更简单的解决方案:
(assoc (into {} m) "key" "value")

关于Clojure:以惯用的 Clojure 方式使用 java.util.HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com