For minimal change to the presented code, what about
(defprotocol appendable (append-to [this ^StringBuilder sb]))
(extend-protocol appendable
String
(append-to [this ^StringBuilder sb] (.append sb this))
clojure.lang.IFn
(append-to [this ^StringBuilder sb] (this sb))
Object
(append-to [this ^StringBuilder sb] (.append sb (str this))))
(defn final-str [a]
(let [sb (StringBuilder.)]
(append-to a sb)
(str sb)))
(defn par-join [sep xs]
(fn [sb]
(when-let [xs (seq xs)]
(append-to (first xs) sb)
(doseq [x (next xs)]
(append-to sep sb)
(append-to x sb)))))
(let [f #(->> % (map (comp val)) (par-join ","))]
(->> data-struct
(map f)
(par-join "\n")
final-str))
Which winds up taking about a second and only creates one StringBuilder.
On Fri Feb 13 2015 at 8:02:27 PM Andy Chambers <[email protected]>
wrote:
> Is there a reason you're collecting the result into a string rather than
> just writing out to a file?
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.