Вариантов много, поскольку Clojure прекрасно работает с коллекциями Java.Это зависит от того, какую именно структуру данных вы хотите использовать в Clojure.
Вот несколько примеров:
;; create a HashSet
(def a (java.util.HashSet.))
(dotimes [i 10] (.add a i))
;; Get all the values as a sequence
(seq a)
=> (0 1 2 3 4 5 6 7 8 9)
;; build a new HashSet containing the values from a
(into #{} a)
#{0 1 2 3 4 5 6 7 8 9}
;; Just use the HashSet directly (high performance, no copy required)
(.contains a 1)
=> true
(.contains a 100)
=> false
Что касается использования каждого из них, я бы предложил следующий совет:
- Если вы пытаетесь обернутьбиблиотеку Java и представить чистый API Clojure, тогда я бы предложил преобразовать в эквивалентные структуры данных Clojure.Это то, что ожидают пользователи Clojure, и вы можете скрыть потенциально грязные детали взаимодействия Java.В качестве бонуса, это сделает вещи неизменными, так что вы не рискуете поменяться коллекциями Java во время их использования.
- Если вы просто хотите использовать Java API быстро и эффективно, просто используйте взаимодействие Javaнепосредственно в коллекции Java.