Clojure: Arbeiten mit einer java.util.HashMap in einer idiomatischen Clojure-Art und Weise
Ich habe einjava.util.HashMap
Objektm
(ein Rückgabewert aus einem Aufruf von Java-Code) und ich möchte eine neue Map mit einem zusätzlichen Schlüssel-Wert-Paar erhalten.
Obm
Wenn es sich um eine Clojure-Karte handelt, könnte ich Folgendes verwenden:
(assoc m "key" "value")
Aber versuchen Sie das auf einemHashMap
gibt:
java.lang.ClassCastException: java.util.HashMap kann nicht in clojure.lang.Associative umgewandelt werden
Kein Glück mitseq
entweder:
(assoc (seq m) "key" "value")
java.lang.ClassCastException: clojure.lang.IteratorSeq kann nicht in clojure.lang.Associative umgewandelt werden
Der einzige Weg, den ich schaffte, war es zu benutzenHashMap
gehört mirput
, aber das kehrt zurückvoid
also muss ich ausdrücklich zurückkehrenm
:
(do (. m put "key" "value") m)
Dies ist kein idiomatischer Clojure-Code, und ich ändere ihnm
anstatt eine neue Karte zu erstellen.
Wie man mit aHashMap
in einer mehr Clojure-ish Art und Weise?