5 ms·
What parts of compatibility are missing? The interop works just fine, as with all other Java. ; example: Stream.of(1,1,2,3,5).map(x -> 2*x).collect(Collector
by dancek 7y ago
What parts of compatibility are missing? The interop works just fine, as with all other Java.
; example: Stream.of(1,1,2,3,5).map(x -> 2*x).collect(Collectors.toList())
user=> (.. (java.util.stream.Stream/of (to-array [1 1 2 3 5]))
(map (reify java.util.function.Function
(apply [this x] (* 2 x))))
(collect (java.util.stream.Collectors/toList)))
[2 2 4 6 10]
Of course it's not practical to convert lists and functions to their Java counterparts like that, but if you need to work with Java objects it's possible.
- airstrike 7y agoSlightly off-topic, but as someone who's normally using Python / R, my hands feel tired just from thinking about typing all of that
- ARandomerDude 7y agoIn practice, you wouldn't. You'd import at the top of the file, then type `Stream/of` instead of `java.util.stream.Stream/of`. I almost never use Java directly though because there are so many great Clojure wrappers.
- Uhuhreally 7y agoIn Clojure that's: (map (fn [x] (* 2 x)) [1 1 2 3 5]) => (2 2 4 6 10)
- agumonkey 7y agoso no Java Function to clojure Function automating mapping ? do people use macros to make it nicer ?
- Uhuhreally 7y agoyou'd use Clojure not Java for an example like the above
- Scarbutt 7y agoI think the context is when doing interop.
- Uhuhreally 7y agoyes but I got the feeling the grandparent was confused so I tried to clarify that the only reason for the verbosity is interop - the Clojure code is much more concise than the Java - the interop code is like listening to a speech being translated between English and Spanish
- dancek 7y agoNot out of the box, probably because java.util.function.Function seems like an afterthought in a strictly object-oriented language while Clojure has first class functions. In practice you don't interop with Java very much, let alone functional Java (as Clojure itself is a much better fit). But if it was useful, it'd be easy to write helpers for converting functions back and forth.
- serpix 7y agofunctions. Macros are a super weapon and their use is reserved for very special cases. One reason is macros can't be composed as functions and also readability goes out the windows.
- logistark 7y agoI think first class support would remove a lot of boilerplate in that code. For the purpose of writing that, i prefer to write it directly in Java.
- keymone 7y agoWhy wouldn’t you prefer writing it directly in Clojure? (map #(* % 2) [1 2 3 4 5]) Even less boilerplate, even more signal/noise.