将字符串列表转换为 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
.
我正在使用 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
.