为了进行排序,这是将Java映射转换为本机Clojure映射的最佳方法吗?

为了进行排序,这是将Java映射转换为本机Clojure映射的最佳方法吗?,java,sorting,map,clojure,Java,Sorting,Map,Clojure,如果这是最好的(或好的)解决方案,有人能确切地解释一下它在做什么吗 (sort (reduce (fn [x [y z]] (assoc x y z)) {} (System/getProperties))) 可用于打印系统属性的位置,例如: (def p (sort (reduce (fn [x [y z]] (assoc x y z)) {} (System/getProperties)))) (defn pnv [nv] (println (str (key nv) "

如果这是最好的(或好的)解决方案,有人能确切地解释一下它在做什么吗

(sort
  (reduce (fn [x [y z]] (assoc x y z)) {} (System/getProperties)))
可用于打印系统属性的位置,例如:

(def p
  (sort
    (reduce (fn [x [y z]] (assoc x y z)) {} (System/getProperties))))

(defn pnv [nv] (println (str (key nv) "=\"" (val nv) "\"")))

(doseq [nv p] (pnv nv))
如果这不是一个好方法,请提供一个更好的方法。谢谢

我知道我能做到:

(doseq [nv (System/getProperties)] (pnv nv))
但排序似乎不起作用:

(doseq [nv (sort (System/getProperties))] (pnv nv))
ClassCastException java.util.Hashtable$Entry cannot be cast to java.lang.Comparable  clojure.lang.Util.compare (Util.java:104)
解决方案,由以下机构提供:


地图通常不会排序-当然,通过向
{}
添加条目获得的任何地图都不会排序。但是,Clojure和Java都提供了排序映射。因此,如果您想要一个具有默认排序顺序的排序映射,您只需执行
(进入(排序映射)另一个映射)
。这适用于java.util.Map以及Clojure类型,因此它应该是您所需要的全部。

映射通常不会排序-当然,通过向
{}
添加条目获得的任何映射都不会排序。但是,Clojure和Java都提供了排序映射。因此,如果您想要一个具有默认排序顺序的排序映射,您只需执行
(进入(排序映射)另一个映射)
。这适用于java.util.Map以及Clojure类型,因此它应该是您所需要的全部。

谢谢!更容易理解。在尝试新的(对我来说)JVM语言时,我通常只使用这个小练习。我真的很喜欢Clojure,谢谢!更容易理解。在尝试新的(对我来说)JVM语言时,我通常只使用这个小练习。我真的很喜欢Clojure。
(doseq [nv (into (sorted-map) (System/getProperties))] (pnv nv))