Я не нашел способа напрямую зацикливаться на Java java.lang.Iterable или java.util.Iterator в Kawa (схема) с использованием взаимодействия Java
Я могу получить на своем 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
или Итераторе.
ПРИМЕЧАНИЕ: я только что понял, что мое рекурсивное "let" ужасно неверно (произойдет сбой, если метод итератора hasNext
вернет false при входе, потому что я инициализирую block-item, вызывая next без предварительной проверки hasNext
, и он будет не печатать все элементы), но эта часть кода не обязательна для ответа на вопрос, и ее можно исправить (сейчас у меня заканчивается время, но я попытаюсь обновить код завтра).
Начальная точка и необходимый код - это первые две строки, где я получаю свой Iterable, а затем мой Iterator.