在clojure中将字符串列表转换为Java类型对象列表



我正在使用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代码中可能有点难以发现的是,因为serverListList<ServerAddress>,当您向其中添加String对象时,它们通过后者的构造函数隐式地转换为ServerAddress对象。

像下面这样的代码应该可以得到你想要的:

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

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