title: Java streams vs Iterators
body: <p>I have been playing with the new and shiny functional part of Java and one of the things that puzzle me the most are streams? </p>
  
  <p>What is their use? </p>
  
  <p>On Google I mostly found explanations of how to use them and practical examples, which I already got down, nothing concrete about the magic behind the scenes, which is what interests me.</p>
  
  <p>I dont mean in a practical sense, coming from a few functional languages i figured out map/filter/reduce/etc. fairly quickly but why do we need to convert to a stream first? Java already has iterators. Is there a fundamental difference between stream and iterator like one being lazy and the other not? Or is it something else?</p>
  
  <p>Bottom line: what is the fundamental difference between iterators and streams and what functionality couldn't be implemented as an extension to iterators and needed a whole new family of types?</p>