System.err.println(Iterators.size(keys));
Как сказано в Javadoc , это исчерпывает итератор keys
: он просто продолжает вызывать next()
, пока hasNext()
не станет ложным.
Тогда это несброс, прежде чем снова вызвать
System.err.println(Iterators.size(keys));
(потому что нет способа сбросить итератор).Так что hasNext()
немедленно возвращает false, поэтому больше нет элементов для чтения.Следовательно, размер равен нулю.
Вам необходимо переназначить переменную с помощью нового итератора:
Iterator<?> keys = json.keys();
System.err.println(Iterators.size(keys));
keys = json.keys(); //
System.err.println(Iterators.size(keys));
или не объявлять переменную (поскольку впоследствии она (*) фактически бесполезна)):
System.err.println(Iterators.size(json.keys()));
System.err.println(Iterators.size(json.keys()));
(*) Вы можете использовать его для удаления последнего элемента итератора.