code: public static <A, B> B reduce(final Iterable<A> iterable,
        final B initial, final Function2<A, B> func) {
      B b = initial;
      for (final A item : iterable) {
        b = func.apply(b, item);
      }
      return b;
    }
docs: reduces an iterable to a single value starting from an initial value and applying down the
  iterable.