public final static <T,R>R mapReduce(final Stream<T> stream,final Function<? super T,? extends R> mapper,final Monoid<R> reducer){
  return reducer.reduce(stream.map(mapper));
}

public final static < T , R > R mapReduce ( final Stream < T > stream , final Function < ? super T , ? extends R > mapper , final Monoid < R > reducer ) { return reducer . reduce ( stream . map ( mapper ) ) ; }
attempt to map this monad to the same type as the supplied monoid , using supplied function then use monoid to reduce values
