Thanks for the reply. I do need to convert to java hashmaps and arraylists because I'm trying to duplicate the testing of a clojure workflow being run on a server thats pushing pure java context through it. So in my tests I define a clojure map but want to javafy it to force errors to happen when I try to evaluate the map as a function.
It's not clear to my how the postwalk-replace will work for converting specific types (clojure maps and lists) to other types (java hashmaps and array lists) recursively. Is the extend-protocol method discussed below not the way to go? On Friday, January 31, 2020 at 3:15:29 PM UTC-6, Alex Miller wrote: > > You don't need that - Clojure maps *are* Java maps (they implement > java.util.Map) and you can pass them into most Java APIs as is (with the > caveat that they are made for reading, not for writing). > > If you did really want to convert them to hash-maps or whatever, it's > pretty easy to do so with a clojure.walk/postwalk-replace. > > On Friday, January 31, 2020 at 3:07:24 PM UTC-6, Jason Ross wrote: >> >> Hey I know this is super old post but what would the reverse look like, >> eg. recursively convert Clojure to java map >> >> On Saturday, October 15, 2011 at 4:10:32 AM UTC-5, Baishampayan Ghose >> wrote: >>> >>> > I have a Java Map contains Map of Maps/List (JSON like map) and have >>> > to convert to Clojure map (This happens at Java - Clojure Interop), So >>> > I have written a converter function 'as-clj-map' by modifying the >>> > clojure walk functions, It works fine, but consume lot of cpu when the >>> > data structure is quit big. Any suggestions to improve this code? >>> >>> What about using protocols for this job? >>> >>> (defprotocol ConvertibleToClojure >>> (->clj [o])) >>> >>> (extend-protocol ConvertibleToClojure >>> java.util.Map >>> (->clj [o] (let [entries (.entrySet o)] >>> (reduce (fn [m [^String k v]] >>> (assoc m (keyword k) (->clj v))) >>> {} entries))) >>> >>> java.util.List >>> (->clj [o] (vec (map ->clj o))) >>> >>> java.lang.Object >>> (->clj [o] o) >>> >>> nil >>> (->clj [_] nil)) >>> >>> (defn as-clj-map >>> [m] >>> (->clj m)) >>> >>> >>> Let me know if this works for you & meets your performance requirements. >>> >>> Regards, >>> BG >>> >>> -- >>> Baishampayan Ghose >>> b.ghose at gmail.com >>> >>> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/a4762b64-5131-4b8f-b794-da3ce41a0c86%40googlegroups.com.