2011-02-22 35 views
5

我想创建Clojure中等价的字符串列表下面的Java代码:如何在Clojure中创建一个字符串列表?

List<String> cities = Arrays.asList(new String[] {"Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm" }); 

:但我不确定确切的语法

+3

至少在较新的Java版本中,您可以使用`Arrays.asList(“Berlin”,“Brussels”,“Hel索契“,”马德里“,”奥斯陆“,”巴黎“,”斯德哥尔摩“)。 – ponzao 2011-02-23 08:43:05

+0

[将Clojure数据结构转换为Java集合]可能的重复(http://stackoverflow.com/questions/4313505/converting-clojure-data-structures-to-java-collections) – 2012-08-11 09:23:52

回答

14

严格地说,上面提供将产生的载体的例子。列表可以通过以下方式产生:

(list "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm") 

或更短:

'("Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm") 

在某些情况下,这种差异可能是非常重要的。

2

如何:

(def cities ["Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm"]) 

中的逗号是可选的。

5

一般你可以使用你想创建作为函数来创建一个集合的名称(易记吧?):

(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"])

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 
相关问题