Блин. Вот учил @Tagir_Valeev делать .onClose(stream::close), когда компоузишь стримы, а тут оказывается, что закрывать их никто не будет и эти обработчики не вызовутся 😔
Ну дык, значит это операция, которая должна выполняться снаружи. А ещё после закрытия итератор должен становиться невалидным и стрелять исключениями даже для hasNext, но это не значит, что после консьюма он автоматом перестает использоваться.