将 java.util.HashSet 转换为 Clojure 集的最佳方法

best way to convert java.util.HashSet to Clojure set

出于兼容性目的的数据查询 return java.util.HashSet。我想使用 clojure.set 函数,例如在查询结果集上设置差异。目前,我正在使用 (set datomic_result) 将结果集转换为 Clojure 集。有替代方案吗?

我不建议您相信 returned 值是一个 java.util.Set,这是一个实现细节(根据 Datomic documentation,return 类型是 java.util.Collection).

您可以通过将集合操作直接应用于 returned 集合而不是强制应用于集合来获得更好的性能。例如:

;; set difference
(into #{} (remove to-remove) query-result)
;; set intersection
(into #{} (filter to-keep) query-result)
;; set union
(into my-set query-result)

into lets you leverage both Transients and Transducers 的使用,可以显着提高大输入的性能。