我正在使用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方法中,您可能需要键入提示,甚至将其倒入(可变的)JavaList
中。