code: public static <T, E> E reduce(final Iterable<T> iterable, final BiFunction<E, T, E> func, final E zeroElem) {
          E accum = zeroElem;
          for (T element : iterable) {
              accum = func.apply(accum, element);
          }
          return accum;
      }
docs: /*
  Documented, #reduce