Хочу написать ленивый итератор, делающий обход в ширину возможно циклического графа.
Конечно, могу написать таким кодом, что там сам черт ногу сломит, громоздко, но хотелось бы элегантности.
Вот код, который бы хотелось иметь:
@Continuable
public static <T> Iterable<Integer> bfIterate(T object, Function<T, Collection<T>> childExtractor) {
Queue<T> queue = new LinkedList<>();
queue.add(object);
Yield.ret(object);
while(!queue.isEmpty()) {
T node = queue.remove();
for(T child : childExtractor.apply(node)) {
Yield.ret(child);
queue.add(child);
}
}
return Yield.done();
}
Использовал библиотеку jyield. Но здесь меня не устраивает, что требуется дополнительная обработка Java кода, выполнения
java -javaagent:../../jyield-0.0.6-jar-with-dependencies.jar над исходниками или байт кодом, что создает некоторый геморрой при сборке, запуске тестов и т.д.
Кто нидь библиотеку не требующий выполнения -javaagent может сказать? Или придется самому лисапед писать?
Если что, Java 8, Spring 4 — все фичи доступны.