
com.aol.cyclops.lambda.tuple.PTuple2 Maven / Gradle / Ivy
The newest version!
package com.aol.cyclops.lambda.tuple;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import lombok.AllArgsConstructor;
import com.aol.cyclops.lambda.tuple.lazymap.LazyMap1PTuple8;
import com.aol.cyclops.lambda.tuple.lazymap.LazyMap2PTuple8;
import com.aol.cyclops.lambda.tuple.memo.Memo2;
public interface PTuple2 extends PTuple1{
default T2 v2(){
if(arity()<2)
throw new ClassCastException("Attempt to upscale to " + PTuple2.class.getCanonicalName() + " from com.aol.cyclops.lambda.tuple.Tuple"+arity()); return (T2)getCachedValues().get(1);
}
default T2 _2(){
return v2();
}
default T2 getT2(){
return v2();
}
/**Strict mapping of the first element
*
* @param fn Mapping function
* @return Tuple1
*/
default PTuple2 map1(Function fn){
if(arity()!=2)
return (PTuple2)PTuple1.super.map1(fn);
else
return PowerTuples.tuple(fn.apply(v1()),v2());
}
/**
* Lazily Map 1st element and memoise the result
* @param fn Map function
* @return
*/
default PTuple2 lazyMap1(Function fn){
if(arity()!=2)
return (PTuple2)PTuple1.super.lazyMap1(fn);
return new LazyMap1PTuple8(fn,(PTuple8)this);
}
/**
* Lazily Map 2nd element and memoise the result
* @param fn Map function
* @return
*/
default PTuple2 lazyMap2(Function fn){
return new LazyMap2PTuple8(fn,(PTuple8)this);
}
/** Map the second element in this Tuple
* @param fn mapper function
* @return new Tuple2
*/
default PTuple2 map2(Function fn){
return of(v1(),fn.apply(v2()));
}
default PTuple1 tuple1(){
return (PTuple1)this.withArity(1);
}
default PTuple2 reorder(Function,NT1> v1S, Function,NT2> v2S){
PTuple2 host = this;
return new TupleImpl(Arrays.asList(),2){
public NT1 v1(){
return v1S.apply(host);
}
public NT2 v2(){
return v2S.apply(host);
}
@Override
public List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy