title: Java 8 Streams - collect vs reduce
body: <p>When would you use <code>collect()</code> vs <code>reduce()</code>?  Does anyone have good, concrete examples of when it's definitely better to go one way or the other?</p>
  
  <p><a href="http://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html#Reduction" rel="noreferrer">Javadoc mentions that collect() is a mutable reduction</a>.</p>
  
  <p>Given that it's a mutable reduction, I assume it requires synchronization (internally) which, in turn, can be detrimental to performance.  Presumably <code>reduce()</code> is more readily parallelizable at the cost of having to create a new data structure for return after every step in the reduce. </p>
  
  <p>The above statements are guesswork however and I'd love an expert to chime in here.</p>