Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
*
* @param value1 top level Array
* @param value2 Nested Array
* @param value3 Nested Array
* @param value4 Nested Array
* @param yieldingFunction Generates a result per combination
* @return Array with an element per combination of nested publishers generated by the yielding function
*/
public static Array forEach4(Array extends T1> value1,
Function super T1, ? extends Array> value2,
BiFunction super T1, ? super R1, ? extends Array> value3,
Fn3 super T1, ? super R1, ? super R2, ? extends Array> value4,
Fn4 super T1, ? super R1, ? super R2, ? super R3, ? extends R> yieldingFunction) {
return value1.flatMap(in -> {
Array a = value2.apply(in);
return a.flatMap(ina -> {
Array b = value3.apply(in,ina);
return b.flatMap(inb -> {
Array c = value4.apply(in,ina,inb);
return c.map(in2 -> yieldingFunction.apply(in, ina, inb, in2));
});
});
});
}
/**
* Perform a For Comprehension over a Array, accepting 3 generating function.
* This results in a four level nested internal iteration over the provided Publishers.
*
*
* @param value1 top level Array
* @param value2 Nested Array
* @param value3 Nested Array
* @param value4 Nested Array
* @param filterFunction A filtering function, keeps values where the predicate holds
* @param yieldingFunction Generates a result per combination
* @return Array with an element per combination of nested publishers generated by the yielding function
*/
public static Array forEach4(Array extends T1> value1,
Function super T1, ? extends Array> value2,
BiFunction super T1, ? super R1, ? extends Array> value3,
Fn3 super T1, ? super R1, ? super R2, ? extends Array> value4,
Fn4 super T1, ? super R1, ? super R2, ? super R3, Boolean> filterFunction,
Fn4 super T1, ? super R1, ? super R2, ? super R3, ? extends R> yieldingFunction) {
return value1.flatMap(in -> {
Array a = value2.apply(in);
return a.flatMap(ina -> {
Array b = value3.apply(in,ina);
return b.flatMap(inb -> {
Array c = value4.apply(in,ina,inb);
return c.filter(in2->filterFunction.apply(in,ina,inb,in2))
.map(in2 -> yieldingFunction.apply(in, ina, inb, in2));
});
});
});
}
/**
* Perform a For Comprehension over a Array, accepting 2 generating function.
* This results in a three level nested internal iteration over the provided Publishers.
*
*
*
*
* @param value1 top level Array
* @param value2 Nested Array
* @param value3 Nested Array
* @param yieldingFunction Generates a result per combination
* @return Array with an element per combination of nested publishers generated by the yielding function
*/
public static Array forEach3(Array extends T1> value1,
Function super T1, ? extends Array> value2,
BiFunction super T1, ? super R1, ? extends Array> value3,
Fn3 super T1, ? super R1, ? super R2, ? extends R> yieldingFunction) {
return value1.flatMap(in -> {
Array a = value2.apply(in);
return a.flatMap(ina -> {
Array b = value3.apply(in,ina);
return b.map(in2 -> yieldingFunction.apply(in, ina, in2));
});
});
}
/**
* Perform a For Comprehension over a Array, accepting 2 generating function.
* This results in a three level nested internal iteration over the provided Publishers.
*
*
* @param value1 top level Array
* @param value2 Nested publisher
* @param value3 Nested publisher
* @param filterFunction A filtering function, keeps values where the predicate holds
* @param yieldingFunction Generates a result per combination
* @return
*/
public static Array forEach3(Array extends T1> value1,
Function super T1, ? extends Array> value2,
BiFunction super T1, ? super R1, ? extends Array> value3,
Fn3 super T1, ? super R1, ? super R2, Boolean> filterFunction,
Fn3 super T1, ? super R1, ? super R2, ? extends R> yieldingFunction) {
return value1.flatMap(in -> {
Array a = value2.apply(in);
return a.flatMap(ina -> {
Array b = value3.apply(in,ina);
return b.filter(in2->filterFunction.apply(in,ina,in2))
.map(in2 -> yieldingFunction.apply(in, ina, in2));
});
});
}
/**
* Perform a For Comprehension over a Array, accepting an additonal generating function.
* This results in a two level nested internal iteration over the provided Publishers.
*
*
* @return Type class for combining Arrays by concatenation
*/
public static MonadPlus monadPlus(){
Monoid> m = Monoid.of(widen(Array.empty()), Instances::concat);
Monoid> m2= (Monoid)m;
return General.monadPlus(monadZero(),m2);
}
/**
*
*
* {@code
* Monoid> m = Monoid.of(ArrayKind.widen(Arrays.asArray()), (a,b)->a.isEmpty() ? b : a);
ArrayKind list = Arrays.monadPlus(m)
.plus(ArrayKind.widen(Arrays.asArray(5)), ArrayKind.widen(Arrays.asArray(10)))
.convert(ArrayKind::narrowK);
//Arrays.asArray(5))
*
* }
*
*
* @param m Monoid to use for combining Arrays
* @return Type class for combining Arrays
*/
public static MonadPlus monadPlus(Monoid> m){
Monoid> m2= (Monoid)m;
return General.monadPlus(monadZero(),m2);
}
public static MonadPlus monadPlusK(Monoid> m){
Monoid> m2= (Monoid)m;
return General.monadPlus(monadZero(),m2);
}
public static Unfoldable unfoldable(){
return new Unfoldable() {
@Override
public Higher unfold(T b, Function super T, Optional>> fn) {
return widen(ReactiveSeq.unfold(b,fn).collect(Array.collector()));
}
};
}
/**
* @return Type class for traversables with traverse / sequence operations
*/
public static Traverse traverse(){
BiFunction,ArrayKind>,Higher>> sequenceFn = (ap, list) -> {
Higher> identity = ap.unit(widen(Array.empty()));
BiFunction>,Higher,Higher>> combineToArray = (acc, next) -> ap.apBiFn(ap.unit((a, b) -> widen(ArrayKind.narrow(a).append(b))),
acc,next);
BinaryOperator>> combineArrays = (a, b)-> ap.apBiFn(ap.unit((l1, l2)-> widen(ArrayKind.narrow(l1).appendAll(l2.narrow()))),a,b); ;
return ReactiveSeq.fromIterable(ArrayKind.narrow(list))
.reduce(identity,
combineToArray,
combineArrays);
};
BiFunction,Higher>,Higher>> sequenceNarrow =
(a,b) -> ArrayKind.widen2(sequenceFn.apply(a, ArrayKind.narrowK(b)));
return General.traverse(zippingApplicative(), sequenceNarrow);
}
/**
*
*
* {@code
* int sum = Arrays.foldable()
.foldLeft(0, (a,b)->a+b, ArrayKind.widen(Arrays.asArray(1,2,3,4)));
//10
*
* }
*
*
*
* @return Type class for folding / reduction operations
*/
public static Foldable foldable(){
BiFunction,Higher,T> foldRightFn = (m, l)-> ReactiveSeq.fromIterable(ArrayKind.narrow(l)).foldRight(m);
BiFunction,Higher,T> foldLeftFn = (m, l)-> ReactiveSeq.fromIterable(ArrayKind.narrow(l)).reduce(m);
return General.foldable(foldRightFn, foldLeftFn);
}
private static ArrayKind concat(ArrayKind l1, ArrayKind l2){
return widen(l1.appendAll(ArrayKind.narrow(l2)));
}
private static ArrayKind ap(ArrayKind> lt, ArrayKind list){
return widen(FromCyclopsReact.fromStream(ReactiveSeq.fromIterable(lt.narrow()).zip(list.narrow(), (a, b)->a.apply(b))).toArray());
}
private static Higher flatMap(Higher lt, Function super T, ? extends Higher> fn){
return widen(ArrayKind.narrow(lt).flatMap(fn.andThen(ArrayKind::narrow)));
}
private static ArrayKind map(ArrayKind lt, Function super T, ? extends R> fn){
return widen(ArrayKind.narrow(lt).map(in->fn.apply(in)));
}
}
public static interface ArrayNested{
public static Nested option(Array