code: public List<T> scanLeft(BinaryOperator<T> accumulator) {
          List<T> result = new ArrayList<>();
          forEachOrdered(t -> {
              if (result.isEmpty())
                  result.add(t);
              else
                  result.add(accumulator.apply(result.get(result.size() - 1), t));
          });
          return result;
      }
docs: Produces a list containing cumulative results of applying the
  accumulation function going left to right.
  
  <p>
  This is a terminal operation.
  
  <p>
  The resulting {@link List} is guaranteed to be mutable.
  
  <p>
  For parallel stream it's not guaranteed that accumulator will always be
  executed in the same thread.
  
  <p>
  This method cannot take all the advantages of parallel streams as it must
  process elements strictly left to right.
  
  @param accumulator a <a
  href="package-summary.html#NonInterference">non-interfering </a>,
  <a href="package-summary.html#Statelessness">stateless</a>
  function for incorporating an additional element into a result
  @return the {@code List} where the first element is the first element of
  this stream and every successor element is the result of applying
  accumulator function to the previous list element and the
  corresponding stream element. The resulting list has the same
  size as this stream.
  @see #foldLeft(BinaryOperator)
  @see #scanRight(BinaryOperator)
  @see #prefix(BinaryOperator)
  @since 0.4.0