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 benutzenHashMapgehö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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage