/** * Reduce with multiple reducers in parallel * NB if this Monad is an Optional [Arrays.asList(1,2,3)] reduce will operate on the Optional as if the list was one value * To reduce over the values on the list, called streamedMonad() first. I.e. streamedMonad().reduce(reducer) * * @param reducers * @return */ public final List<T> reduce(Iterable<Monoid<T>> reducers){ return StreamUtils.reduce(monad, reducers); }
/** * Reduce with multiple reducers in parallel * NB if this Monad is an Optional [Arrays.asList(1,2,3)] reduce will operate on the Optional as if the list was one value * To reduce over the values on the list, called streamedStreamUtils.sequenceM() first. I.e. streamedStreamUtils.sequenceM().reduce(reducer) * * @param reducers * @return */ public final List<T> reduce(Iterable<Monoid<T>> reducers){ return StreamUtils.reduce(stream, reducers); }
/** * Reduce with multiple reducers in parallel * NB if this Monad is an Optional [Arrays.asList(1,2,3)] reduce will operate on the Optional as if the list was one value * To reduce over the values on the list, called streamedStreamUtils.sequenceM() first. I.e. streamedStreamUtils.sequenceM().reduce(reducer) * * @param reducers * @return */ public final List<T> reduce(Stream<? extends Monoid<T>> reducers){ return StreamUtils.reduce(stream, reducers); } /**
/** * Reduce with multiple reducers in parallel * NB if this Monad is an Optional [Arrays.asList(1,2,3)] reduce will operate on the Optional as if the list was one value * To reduce over the values on the list, called streamedMonad() first. I.e. streamedMonad().reduce(reducer) * * @param reducers * @return */ public final List<T> reduce(Stream<Monoid<T>> reducers){ return StreamUtils.reduce(monad, reducers); } /**
/** * Simultanously reduce a stream with multiple reducers * * @param stream Stream to reduce * @param reducers Reducers to reduce Stream * @return Reduced Stream values as List entries */ @SuppressWarnings({"rawtypes","unchecked"}) public static <R> List<R> reduce(Stream<R> stream,Stream<Monoid<R>> reducers){ return StreamUtils.reduce(stream, reducers); }
/** * Simultanously reduce a stream with multiple reducers * * <pre>{@code * * Monoid<Integer> sum = Monoid.of(0,(a,b)->a+b); Monoid<Integer> mult = Monoid.of(1,(a,b)->a*b); val result = StreamUtils.reduce(Stream.of(1,2,3,4),Arrays.asList(sum,mult)); assertThat(result,equalTo(Arrays.asList(10,24))); }</pre> * * @param stream Stream to reduce * @param reducers Reducers to reduce Stream * @return Reduced Stream values as List entries */ @SuppressWarnings({"rawtypes","unchecked"}) public static <R> List<R> reduce(Stream<R> stream,Iterable<Monoid<R>> reducers){ return StreamUtils.reduce(stream, reducers); } /**
/** * Simultanously reduce a stream with multiple reducers * * <pre> * {@code * Monoid<String> concat = Monoid.of("",(a,b)->a+b); Monoid<String> join = Monoid.of("",(a,b)->a+","+b); assertThat(StreamUtils.reduce(Stream.of("hello", "world", "woo!"),Stream.of(concat,join)) ,equalTo(Arrays.asList("helloworldwoo!",",hello,world,woo!"))); * } * </pre> * * @param stream Stream to reduce * @param reducers Reducers to reduce Stream * @return Reduced Stream values as List entries */ @SuppressWarnings({"rawtypes","unchecked"}) public static <R> List<R> reduce(Stream<R> stream,Stream<Monoid<R>> reducers){ return (List)reduce(stream, (List)reducers.collect(Collectors.toList())); }
/** * Simultanously reduce a stream with multiple reducers * * <pre> * {@code * Monoid<String> concat = Monoid.of("",(a,b)->a+b); Monoid<String> join = Monoid.of("",(a,b)->a+","+b); assertThat(StreamUtils.reduce(Stream.of("hello", "world", "woo!"),Stream.of(concat,join)) ,equalTo(Arrays.asList("helloworldwoo!",",hello,world,woo!"))); * } * </pre> * * @param stream Stream to reduce * @param reducers Reducers to reduce Stream * @return Reduced Stream values as List entries */ @SuppressWarnings({"rawtypes","unchecked"}) public static <R> List<R> reduce(Stream<R> stream,Stream<? extends Monoid<R>> reducers){ return (List)reduce(stream, (List)reducers.collect(Collectors.toList())); }