我想在Clojure中创建一个等同于以下Java代码的字符串列表:
List<String> cities = Arrays.asList(new String[] {"Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm" });
:但我不确定确切的语法
答案 0 :(得分:14)
严格地说,上面提供的例子将产生向量。列表可以通过以下方式生成:
(list "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm")
或更短:
'("Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm")
在某些情况下,这种差异可能很重要。
答案 1 :(得分:8)
(def cities ["Berlin" "Brussels" "Helsinki" "Madrid" "Oslo" "Paris" "Stockholm"])
http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips#Clojure_for_Java_Programmers
答案 2 :(得分:6)
一般情况下,你可以使用你想要创建的集合的名称作为创建它的函数(容易记住呃?):
(vector "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm")
(hash-map "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris")
(sorted-map "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris")
(array-map "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris")
(hash-set "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris" "Stockholm")
(sorted-set "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris" "Stockholm")
如果您事先并不知道需要创建哪种类型,则可以使用into
。
(defn make-trip [trip cities]
(into trip cities))
并传递类似(make-trip #{"home"} ["Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris"])
答案 3 :(得分:2)
怎么样:
(def cities ["Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm"])
逗号是可选的。
答案 4 :(得分:2)
这些都不等同于:
List<String> cities = Arrays.asList(new String[] {"Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm" });
这更接近实际问题的答案:
user=> (java.util.ArrayList. [1 2 3])
#<ArrayList [1, 2, 3]>
user=> (.get (java.util.ArrayList. [1 2 3]) 0)
1