Filter elements out of the stream which do not match the supplied predicate.
The returned Stream is also AutoCloseable; closing the returned Stream should also close this stream,
so as to make resource-handling simpler.
Conversion utility to allow Streams to be treated as iterators. This is useful
for interacting with library methods which do not allow streams.
Be aware that the iterator interface hides exceptions by converting into runtime exceptions. While
this may seem appetizing to you at first, remember that we use streams specifically because
we expect certain error patterns, it is not always a good idea to hide those error patterns from view.