java - 使 Java 类在 Clojure 中作为序列工作

标签 java clojure sequence clojure-java-interop

我正在使用表示结果序列的 Java 类(有点像 Clojure vector )。

我想将这个类与典型的 Clojure 序列函数一起使用(即我想让这个类表现得好像它支持序列抽象)但是我不能改变这个类所以我无法使其实现 clojure.lang.Seqable 或类似的。此外,令人恼火的是,该类没有实现 java.util.Collectionjava.lang.Iterable

我可以看到几个选项:

  • 在对象的(现有)迭代器上使用iterator-seq
  • 将对象包装在另一个实现 java.util.Collection/clojure.lang.Sequable
  • 的类中
  • 创建一个通过查询对象构建 Clojure vector 或序列的函数

还有其他选择吗?什么是最好的方法?

最佳答案

最快最直接的方法是使用iterator-seq

这确实引出了一个问题:为什么核心 Clojure 不提供像 SeqSource 这样的协议(protocol),它会被 seq 调用。然后可以“扩展”非标准集合以提供序列,类似于 InternalReduce 为 reduce 工作的方式。

关于java - 使 Java 类在 Clojure 中作为序列工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966051/

相关文章:

javascript - JS+CSS 如何从右上到左下显示数组中的图片

Python-按组计算连续频率

java - 拍摄屏幕照片时显示对话框

java - 如何创建索引并在 Elasticsearch 中输入 - 我已经尝试过到目前为止提供的答案,但它们不起作用

java - 在 Spring Boot 中以编程方式配置 DataSource

java - Spring:不以惰性模式加载,但获取数据

clojure - 是否期望 identity 返回与其参数不同的东西?

clojure:在 cond 中使用绑定(bind)仅将 recur 放置在尾部位置?

Clojure 四舍五入到小数位

python - 考虑顺序如何检查列表(字符串)是否包含另一个列表(字符串)