Search code examples
listdata-structuresclojurejava-interop

Clojure - convert list into Java array


Is there any idiomatic way of converting Clojure list into Java array, other than first converting it to vector and using into-array (means, something other than (into-array (vec my-list)), as I don't want additional overhead)?


Solution

  • Your question seems to be based on a false premise. into-array does not need to take a vector, it takes a seqable value. The documentation ( http://clojuredocs.org/clojure_core/clojure.core/into-array ) contains examples of using into-array on a non-vector sequence:

    user=> (into-array (range 4))
    #<Integer[] [Ljava.lang.Integer;@63d6dc46>
    
    user=> (type (range 4))
    clojure.lang.LazySeq
    
    user=> (doc range)
    -------------------------
    clojure.core/range
    ([] [end] [start end] [start end step])
      Returns a lazy seq of nums from start (inclusive) to end
      (exclusive), by step, where start defaults to 0, step to 1, and end
      to infinity.
    

    Calling it on a list works just as well:

    user=> (into-array (list 1 2 3))
    #<Long[] [Ljava.lang.Long;@138297fe>