java - 有没有一种方法可以直接循环遍历 Kawa 中的 Java Iterable 或者循环遍历 java.util.Iterator

标签 java scheme lisp kawa

我还没有找到使用 Java interop 在 Kawa (Scheme) 中直接循环 Java java.lang.Iterable 或 java.util.Iterator 的方法

我可以访问我的 Java java.lang.Iterable,然后访问我的 java.util.Iterator 并使用名为 let 的递归遍历项目:

((define blkaccessor::java.lang.Iterable (bfaccessor:getHeaderAccessor))
(define blkaccitr::java.util.Iterator (blkaccessor:iterator))
(let        loop    ((block-item::JDataBlockItemData (blkaccitr:next)))
             (when (blkaccitr:hasNext)
                (display &{&[block-item:name] = &[block-item:value]
})
                (loop (blkaccitr:next))
            )
)

代码运行并列出 REPL 中的所有项目,但必须有一种方法可以直接在 Iterable 或 Iterator 上循环。

注意:我刚刚意识到我的递归“let”是非常错误的(如果迭代器 hasNext 方法在入口时返回 false 它将失败,因为我通过调用 next 初始化 block 项而不检查 hasNext 首先,它不会打印所有项目)但这部分代码对于回答问题不是必需的,它可以被修复(我现在时间不多了,但我会尝试更新代码明天)。
起点和基本代码是我获得 Iterable 的前两行,然后是 Iterator。

最佳答案

看起来“map”和“for-each”应该能够迭代迭代器:https://gitlab.com/kashell/Kawa/commit/9428041dca2d262edc3a5ab781e1302f33e279a1

如果没有更多(或更少)细节,您的代码将无法重现,但以下是对 Java 字符串数组进行迭代的示例:

(let ((java-string-array (String[] "aaa" "bb" "c")))
  (for-each (lambda (string) (write string))
            java-string-array))

关于java - 有没有一种方法可以直接循环遍历 Kawa 中的 Java Iterable 或者循环遍历 java.util.Iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54099818/

相关文章:

java - 无共享 Java Web 应用程序框架

java - JOGL Opengl WriteCloneable 在 Eclipse 中

Java:在保存游戏时更改 JPanel

scheme - 检查数字是否出现在数字列表中

scheme - 我想弄清楚如何将 3 个变量合并到我的 Racket 尾递归代码中

scheme - R6RS 与 R5RS 方案

lisp - 对排序的整数列表进行分组的惯用方法?

java - GAE/J 数据存储 : storing null vs missing values

lisp - 计划中的展开功能

windows - 字符无法在 CLISP (2.49) 的字符集中表示