Clojure - 将列表转换为Java数组

时间:2013-05-20 10:15:10

标签: list data-structures clojure java-interop

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

2 个答案:

答案 0 :(得分:9)

你的问题似乎是基于错误的前提。 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.

在列表中调用它也同样有效:

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

答案 1 :(得分:1)

由于我需要特定的整数数组,我使用int-array函数,它将列表作为参数。