将字符串列表转换为 clojure 中 java 类型对象的列表

convert list of strings to list of java type objects in clojure

我正在使用 mongo java 驱动程序和 clojure 进行 mongo 连接,以在 java 中建立连接 我正在使用以下代码片段

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;

MongoClientURI uri = new MongoClientURI("mongodb://xxx:***@url:27017/test?readPreference=primary");
List<String> hosts = uri.getHosts();
List<ServerAddress> serverList = new LinkedList<>();

for(String host:hosts) {
    serverList.add(new ServerAddress(host)); //updated
}

我想在 clojure 中获得同样的功能,所以我尝试了这个

(def uri (MongoClientURI. uri))
(def hosts (.getHosts uri))

现在我有了字符串形式的主机列表,如何将它们转换为 ServerAddress 类型的列表?

在 Java 代码中可能有点难以发现的是,因为 serverList 是一个 List<ServerAddress>,当您向其中添加 String 对象时,它们是通过后者的构造函数隐式转换为 ServerAddress 对象。

像下面这样的内容应该可以满足您的需求:

(def host (map #(ServerAddress. %) (.getHosts uri)))

请注意,此时您将拥有一个 Clojure 序列——如果您将它传递给 Java 方法,您可能需要键入提示它,甚至将它倒入一个(可变的)Java List.