我正在使用Sesame库在内存中的三重存储上运行SPARQL查询。

我正在使用Clojure实现此目的。

查询结果是一个类似Iterator的自定义对象,因此clojure seq不能立即使用。

将自定义java迭代器之类的对象转换为clojure序列的最优雅方法是什么?

我想到的最明显,最愚蠢的想法是,将其循环并建立clojure vector ,但是我敢肯定,有更优雅的方法可以解决此问题。

[1] http://www.openrdf.org/doc/sesame2/api/info/aduna/iteration/Iteration.html

最佳答案

测试版本:

(defn iteration->seq [iteration]
 (seq
  (reify java.lang.Iterable
      (iterator [this]
         (reify java.util.Iterator
           (hasNext [this] (.hasNext iteration))
           (next [this] (.next iteration))
           (remove [this] (.remove iteration)))))))

10-07 12:13