T
- public interface Eval<T> extends java.util.function.Supplier<T>, MonadicValue<T>, Functor<T>, Filterable<T>, ApplicativeFunctor<T>, Matchable.ValueAndOptionalMatcher<T>
public void odd(){
System.out.println(even(Eval.now(200000)).get());
}
public Eval<String> odd(Eval<Integer> n ) {
return n.flatMap(x->even(Eval.now(x-1)));
}
public Eval<String> even(Eval<Integer> n ) {
return n.flatMap(x->{
return x<=0 ? Eval.now("done") : odd(Eval.now(x-1));
});
}
Modifier and Type | Interface and Description |
---|---|
static class |
Eval.Module |
ApplicativeFunctor.Applicatives, ApplicativeFunctor.ApplyFunctions<T>
Value.ValueImpl<T>
Convertable.SupplierToConvertable<T>
Modifier and Type | Method and Description |
---|---|
static <T,R> Eval<R> |
accumulate(CollectionX<Eval<T>> maybes,
java.util.function.Function<? super T,R> mapper,
Semigroup<R> reducer) |
static <T,R> Eval<R> |
accumulate(CollectionX<Eval<T>> evals,
Reducer<R> reducer) |
static <T> Eval<T> |
accumulate(CollectionX<Eval<T>> maybes,
Semigroup<T> reducer) |
static <T> Eval<T> |
always(java.util.function.Supplier<T> value) |
default <T2,R> Eval<R> |
ap(Value<? extends T2> app,
java.util.function.BiFunction<? super T,? super T2,? extends R> fn)
Apply a function across two values at once.
|
default Eval<java.util.concurrent.CompletableFuture<T>> |
asyncAlways() |
default Eval<java.util.concurrent.CompletableFuture<T>> |
asyncAlways(java.util.concurrent.Executor ex) |
default Eval<java.util.concurrent.CompletableFuture<T>> |
asyncLater() |
default Eval<java.util.concurrent.CompletableFuture<T>> |
asyncLater(java.util.concurrent.Executor ex) |
default Eval<java.util.concurrent.CompletableFuture<T>> |
asyncNow() |
default Eval<java.util.concurrent.CompletableFuture<T>> |
asyncNow(java.util.concurrent.Executor ex) |
default <U> Eval<U> |
cast(java.lang.Class<? extends U> type)
Cast all elements in a stream to a given type, possibly throwing a
ClassCastException . |
default <R> Eval<R> |
coflatMap(java.util.function.Function<? super MonadicValue<T>,R> mapper) |
default Eval<T> |
combine(Monoid<T> monoid,
Eval<? extends T> v2) |
default Maybe<T> |
filter(java.util.function.Predicate<? super T> pred)
Keep only elements for which the supplied predicates hold
e.g.
|
default Maybe<T> |
filterNot(java.util.function.Predicate<? super T> fn)
Remove any elements for which the predicate holds (inverse operation to filter)
e.g.
|
<R> Eval<R> |
flatMap(java.util.function.Function<? super T,? extends Eval<? extends R>> mapper) |
static <T> Eval<T> |
fromIterable(java.lang.Iterable<T> iterable) |
static <T> Eval<T> |
fromPublisher(org.reactivestreams.Publisher<T> pub) |
T |
get() |
static <T> Eval<T> |
later(java.util.function.Supplier<T> value) |
<R> Eval<R> |
map(java.util.function.Function<? super T,? extends R> mapper)
Transform this functor using the supplied transformation function
|
static <R> Eval<R> |
narrow(Eval<? extends R> broad) |
default Eval<MonadicValue<T>> |
nest() |
default Maybe<T> |
notNull()
Filter elements retaining only values which are not null
|
static <T> Eval<T> |
now(T value) |
default <U> Maybe<U> |
ofType(java.lang.Class<? extends U> type)
Keep only those elements in a stream that are of a given type.
|
default Eval<T> |
peek(java.util.function.Consumer<? super T> c)
Peek at the current value of this Functor, without transforming it
|
static <T> Eval<ListX<T>> |
sequence(CollectionX<Eval<T>> evals) |
static <T> Eval<ReactiveSeq<T>> |
sequence(java.util.stream.Stream<Eval<T>> evals) |
default PVectorX<java.util.function.Function<java.lang.Object,java.lang.Object>> |
steps() |
default <R> Eval<R> |
trampoline(java.util.function.Function<? super T,? extends Trampoline<? extends R>> mapper)
Performs a map operation that can call a recursive method without running out of stack space
|
<T> Eval<T> |
unit(T unit) |
default <R> R |
visit(java.util.function.Function<? super T,? extends R> present,
java.util.function.Supplier<? extends R> absent) |
default <T2,R> Eval<R> |
zip(java.util.function.BiFunction<? super T,? super T2,? extends R> fn,
org.reactivestreams.Publisher<? extends T2> app)
Equivalent to ap, but accepts a Publisher and takes the first value only from that publisher.
|
default <T2,R> Eval<R> |
zip(java.lang.Iterable<? extends T2> app,
java.util.function.BiFunction<? super T,? super T2,? extends R> fn)
Equivalent to ap, but accepts an Iterable and takes the first value only from that iterable.
|
anyM
applyFunctions
collect, fold, fold, generate, iterate, mapReduce, mkString, newSubscriber, of, stream, subscribe, test, toDequeX, toEvalAlways, toEvalLater, toEvalNow, toFeatureToggle, toFutureStream, toFutureStream, toIor, toLazyImmutable, toList, toListX, toMaybe, toMutable, toPBagX, toPOrderedSetX, toPQueueX, toPSetX, toPStackX, toPVectorX, toQueueX, toSetX, toSimpleReact, toSimpleReact, toSortedSetX, toTry, toTry, toTry, toXor, toXor, unapply
endsWith, endsWithIterable, findAny, findFirst, firstValue, foldable, foldRight, foldRight, foldRight, foldRightMapToType, get, groupBy, join, join, join, mapReduce, print, print, printErr, printOut, reduce, reduce, reduce, reduce, reduce, reduce, reduce, schedule, scheduleFixedDelay, scheduleFixedRate, single, single, singleOptional, startsWith, startsWithIterable, toConcurrentLazyCollection, toConcurrentLazyStreamable, toLazyCollection, validate, xMatch
collect, fromSupplier, isPresent, iterator, orElse, orElseGet, orElseThrow, toAtomicReference, toCompletableFuture, toCompletableFutureAsync, toCompletableFutureAsync, toFutureW, toFutureWAsync, toFutureWAsync, toOptional, toOptionalAtomicReference, toStream
iterator, toOptional
matches
static <T> Eval<T> fromPublisher(org.reactivestreams.Publisher<T> pub)
static <T> Eval<T> fromIterable(java.lang.Iterable<T> iterable)
static <T> Eval<T> now(T value)
static <T> Eval<T> later(java.util.function.Supplier<T> value)
static <T> Eval<T> always(java.util.function.Supplier<T> value)
static <T> Eval<ListX<T>> sequence(CollectionX<Eval<T>> evals)
static <T> Eval<ReactiveSeq<T>> sequence(java.util.stream.Stream<Eval<T>> evals)
static <T,R> Eval<R> accumulate(CollectionX<Eval<T>> evals, Reducer<R> reducer)
static <T,R> Eval<R> accumulate(CollectionX<Eval<T>> maybes, java.util.function.Function<? super T,R> mapper, Semigroup<R> reducer)
static <T> Eval<T> accumulate(CollectionX<Eval<T>> maybes, Semigroup<T> reducer)
<T> Eval<T> unit(T unit)
<R> Eval<R> map(java.util.function.Function<? super T,? extends R> mapper)
Functor
of(1,2,3).map(i->i*2)
//[2,4,6]
map
in interface ConvertableFunctor<T>
map
in interface Functor<T>
map
in interface MonadicValue<T>
mapper
- Transformation function<R> Eval<R> flatMap(java.util.function.Function<? super T,? extends Eval<? extends R>> mapper)
default PVectorX<java.util.function.Function<java.lang.Object,java.lang.Object>> steps()
default <R> Eval<R> coflatMap(java.util.function.Function<? super MonadicValue<T>,R> mapper)
coflatMap
in interface MonadicValue<T>
default Eval<MonadicValue<T>> nest()
nest
in interface MonadicValue<T>
T get()
get
in interface Convertable<T>
get
in interface java.util.function.Supplier<T>
default <U> Maybe<U> ofType(java.lang.Class<? extends U> type)
Filterable
// (1, 2, 3) ReactiveSeq.of(1, "a", 2, "b",3).ofType(Integer.class)
ofType
in interface Filterable<T>
default Maybe<T> filterNot(java.util.function.Predicate<? super T> fn)
Filterable
of(1,2,3).filter(i->i>2);
//[1,2]
filterNot
in interface Filterable<T>
fn
- to filter elements by, retaining matchesdefault Maybe<T> notNull()
Filterable
of(1,2,null,4).nonNull();
//[1,2,4]
notNull
in interface Filterable<T>
default Maybe<T> filter(java.util.function.Predicate<? super T> pred)
Filterable
of(1,2,3).filter(i->i>2);
//[3]
filter
in interface Filterable<T>
pred
- to filter elements by, retaining matchesdefault <U> Eval<U> cast(java.lang.Class<? extends U> type)
Functor
ClassCastException
.
// ClassCastException ReactiveSeq.of(1, "a", 2, "b", 3).cast(Integer.class)default Eval<T> peek(java.util.function.Consumer<? super T> c)
Functor
of(1,2,3).map(System.out::println)
1
2
3
default <R> Eval<R> trampoline(java.util.function.Function<? super T,? extends Trampoline<? extends R>> mapper)
Functor
ReactiveSeq.of(10,20,30,40)
.trampoline(i-> fibonacci(i))
.forEach(System.out::println);
Trampoline<Long> fibonacci(int i){
return fibonacci(i,1,0);
}
Trampoline<Long> fibonacci(int n, long a, long b) {
return n == 0 ? Trampoline.done(b) : Trampoline.more( ()->fibonacci(n-1, a+b, a));
}
55
6765
832040
102334155
ReactiveSeq.of(10_000,200_000,3_000_000,40_000_000)
.trampoline(i-> fibonacci(i))
.forEach(System.out::println);
completes successfully
trampoline
in interface Functor<T>
default Eval<java.util.concurrent.CompletableFuture<T>> asyncNow(java.util.concurrent.Executor ex)
default Eval<java.util.concurrent.CompletableFuture<T>> asyncLater(java.util.concurrent.Executor ex)
default Eval<java.util.concurrent.CompletableFuture<T>> asyncAlways(java.util.concurrent.Executor ex)
default <R> R visit(java.util.function.Function<? super T,? extends R> present, java.util.function.Supplier<? extends R> absent)
visit
in interface Convertable<T>
visit
in interface Matchable.MatchableOptional<T>
visit
in interface Matchable.ValueAndOptionalMatcher<T>
visit
in interface Visitable<T>
default <T2,R> Eval<R> ap(Value<? extends T2> app, java.util.function.BiFunction<? super T,? super T2,? extends R> fn)
ap
in interface ApplicativeFunctor<T>
app
- fn
- default <T2,R> Eval<R> zip(java.lang.Iterable<? extends T2> app, java.util.function.BiFunction<? super T,? super T2,? extends R> fn)
zip
in interface ApplicativeFunctor<T>
app
- fn
- default <T2,R> Eval<R> zip(java.util.function.BiFunction<? super T,? super T2,? extends R> fn, org.reactivestreams.Publisher<? extends T2> app)
zip
in interface ApplicativeFunctor<T>
app
- fn
-