next will only be called after a call to hasNext, where the null checks are done. as regards to over-engineering, this has simplified my life a lot. constructing individual records using an iterator rather than having to recursively iterate a map of map of records is a boon.