title: How does Stream.reduce(BinaryOperator<T> accumulator) initialized?
body: <p>The following code works perfectly without the need to initialize the <code>reduce</code> operation.</p>
  
  <pre><code>int sum=Stream.of(2,3).reduce((Integer a,Integer b)-&gt;a+b).get(); // sum = 5
  int sum=Stream.of(2,3).reduce((Integer a,Integer b)-&gt;a*b).get(); // sum = 6
  </code></pre>
  
  <p>How does it know that the first accumulator is a <code>+</code> so that it should initialize to a new sum = 0, and the second accumulator is a <code>*</code> so that it should initialize to a new sum = 1?</p>