代码之家  ›  专栏  ›  技术社区  ›  Ralph java.is.for.desktop

转换Culjress数据结构到Java集合

  •  39
  • Ralph java.is.for.desktop  · 技术社区  · 14 年前

    将数据结构转换为Java集合的Culjury习惯用法是什么?

    • [] 到A java.util.ArrayList
    • {} 到A java.util.HashMap
    • #{} 到A java.util.HashSet
    • () 到A java.util.LinkedList

    有clojure.contrib图书馆吗?

    用例 为了简化我的组织,我正在考虑为CuljueJavaREST服务器编写一个单元测试套件。我已经在scala中编写了该套件的一部分,但认为Clojure可能更好,因为宏支持会减少很多样板代码(我需要测试几十个类似的REST服务调用)。

    我正在使用easymock模拟数据库连接(有更好的方法吗?)我的模仿方法需要回归 java.util.List<java.util.Map<String, Object>> 项(表示数据库行集)到调用方。我会通过一个 [{ "first_name" "Joe" "last_name" "Smith" "date_of_birth" (date "1960-06-13") ... } ...] 将其构造为我的模拟并将其转换为所需的Java集合,以便可以以期望的格式返回给调用方。

    1 回复  |  直到 14 年前
        1
  •  67
  •   Abhinav Sarkar    14 年前

    clojure vector、set和list类实现 java.util.Collection 界面与 ArrayList , HashSet LinkedList 可以采取 java.util.collection(java.util.collection) 构造函数参数。所以你可以简单地做:

    user=> (java.util.ArrayList. [1 2 3])
    #<ArrayList [1, 2, 3]>
    user=> (.get (java.util.ArrayList. [1 2 3]) 0)
    1
    

    类似地,Clojure映射类实现 java.util.Map 界面与 HashMap 采取了 Java.UTI.MAP 构造函数参数。所以:

    user=> (java.util.HashMap. {"a" 1 "b" 2})
    #<HashMap {b=2, a=1}>
    user=> (.get (java.util.HashMap. {"a" 1 "b" 2}) "a")
    1
    

    你也可以做相反的事情,这样做容易得多:

    ser=> (into [] (java.util.ArrayList. [1 2 3]))
    [1 2 3]
    user=> (into #{} (java.util.HashSet. #{1 2 3}))
    #{1 2 3}
    user=> (into '() (java.util.LinkedList. '(1 2 3)))
    (3 2 1)
    user=> (into {} (java.util.HashMap. {:a 1 :b 2}))
    {:b 2, :a 1}