 <p>Since the only reason not to use <code>Stream</code>s is that it can be tricky to ensure the JVM isn't keeping references to early conses around, one approach I've used that's fairly nice is to build up a <code>Stream</code> and immediately convert it to an <code>Iterator</code> for actual use. It loses a little of <code>Stream</code>'s nice properties on the use side especially with respect to backtracking, but if you're only going to make one pass over the result it's frequently easier to build a structure this way than to contort into the <code>hasNext</code>/<code>next()</code> model of <code>Iterator</code> directly.</p>