Я унаследовал некоторый Java код, который выполняет следующие действия:Clojure изменить LazySeq
1) он получает от Clojure LazySeq объект (который состоит из ряда объектов PersistentHashMap)
2) она передает этот же объект LazySeq (без изменений) возвращается к сценарию Clojure, где он преобразуется в строку и передается обратно на Java
Проблема заключается в том, что внутри кода Java после этапа (1) и до этапа (2) мне нужно для изменения некоторых объектов PersistentHashMap внутри LazySeq, а затем перейдите к шагу (2). Что-то вроде:
LazySeq seq = clojureFunctionReturningLazySeq();
//update the elements of the sequence
String result = clojureFunctionReceivingLazySeq(seq);
Я не могу изменить сценарий Clojure себя и обновление LazySeq должно произойти внутри кода Java. Я проверил API LazySeq, и я не могу найти способ изменения (или добавления) элемента.
Спасибо,
Криса
Вы можете рассматривать его как итерируемую коллекцию. –
LazySeq и PersistentHashMap являются неизменными - по сути, вам нужно будет создать новую последовательность, основанную на содержимом того, который вы передали. Для Java это будет нетривиальная работа. – Alex
@Alex Это тривиально, например, превратите его в ArrayList (конструктор ArrayList берет коллекцию), мутируйте ArrayList по желанию и возвращайте ArrayList, предполагая, что для получающего кода Clojure требуется только коллекция. –