Clojure - 将列表转换为Java数组

Arn*_*hor 4 list clojure java-interop data-structures

是否有任何惯用的方法将Clojure列表转换为Java数组,除了首先将其转换为vector并使用into-array(意味着,除了之外(into-array (vec my-list)),我不想要额外的开销)?

svk*_*svk 10

你的问题似乎是基于错误的前提.into-array不需要采用向量,它需要一个seqable值.文档(http://clojuredocs.org/clojure_core/clojure.core/into-array)包含在非向量序列上使用into-array的示例:

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.
Run Code Online (Sandbox Code Playgroud)

在列表中调用它同样适用:

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