@ Override public Optional < E > next ( ) { if ( iterator . hasNext ( ) ) { return Optional . of ( iterator . next ( ) ) ; } return Optional . empty ( ) ; }
calling next over the boundary of the contained iterator leads Optional . empty indefinitely no matter how many times you try you can t shoot the dog