将Java数组转换为Clojure列表或序列?

jpa*_*ugh 5 java arrays list clojure sequence

如何将Java数组转换为Clojure序列数据结构(如列表或其他序列)?

这个问题说明了如何做逆; Clojure文档展示了如何创建,变异和读取数组; 但有没有内置的方法将它们转换为列表,或其他一些Clojure原生序列?

jpa*_*ugh 12

是的,有一种方法可以将数组转换为列表!代码(seq java-array-here)将数组转换为ArraySeq实现的数组ISeq,因此可以像任何其他Clojure 序列一样对待.


Mar*_*ars 1

@jpaugh 是对的:通常您只需要一个 seq 即可。许多 clojure 集合函数适用于许多不同的结构,包括 seq。但是,如果您需要其他集合类型,您通常可以使用into

(def java-array (long-array (range 3)))
(into () java-array) ;=> (2 1 0)
(into [] java-array) ;=> [0 1 2]
Run Code Online (Sandbox Code Playgroud)

请注意,使用into创建列表会颠倒输入顺序。

人们通常可以像使用 Clojure 集合一样使用 Java 数组。我建议在 REPL 的某些测试代码中假装数组是一个集合,然后看看会发生什么。通常它会起作用。例如:

(def java-array (long-array (range 3)))
(into () java-array) ;=> (2 1 0)
(into [] java-array) ;=> [0 1 2]
Run Code Online (Sandbox Code Playgroud)

@jpaugh 的回答提供了另一个例子。