code: public static <E, R> R reduce(Iterable<E> iterable, BiFunction<R, E, R> function, R init) {
          dbc.precondition(iterable != null, "cannot call reduce with a null iterable");
          return new Reductor<>(function, init).apply(iterable.iterator());
      }
docs: Reduces an iterator of elements using the passed function.
  
  @param <E> the element type parameter
  @param <R> the result type parameter
  @param iterable the iterable to be consumed
  @param function the reduction function
  @param init the initial value for reductions
  @return the reduced value