我还没有找到使用Java互操作直接在Kawa(方案)中循环遍历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而不检查hasNext
来初始化块项首先,它不会打印所有项目),但是这部分代码对于回答该问题不是必不可少的,并且可以修复(我的时间不多了,但明天我将尝试更新代码)。
起点和基本代码是我获得Iterable然后获得Iterator的前两行。
答案 0 :(得分:1)
看起来“ 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))