
fj.P3 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of functionaljava Show documentation
Show all versions of functionaljava Show documentation
Functional Java is an open source library that supports closures for the Java programming language
The newest version!
package fj;
import static fj.P.weakMemo;
/**
* A product-3.
*/
public abstract class P3 {
/**
* Access the first element of the product.
*
* @return The first element of the product.
*/
public abstract A _1();
/**
* Access the second element of the product.
*
* @return The second element of the product.
*/
public abstract B _2();
/**
* Access the third element of the product.
*
* @return The third element of the product.
*/
public abstract C _3();
/**
* Map the first element of the product.
*
* @param f The function to map with.
* @return A product with the given function applied.
*/
public final P3 map1(final F f) {
return new P3() {
public X _1() {
return f.f(P3.this._1());
}
public B _2() {
return P3.this._2();
}
public C _3() {
return P3.this._3();
}
};
}
/**
* Map the second element of the product.
*
* @param f The function to map with.
* @return A product with the given function applied.
*/
public final P3 map2(final F f) {
return new P3() {
public A _1() {
return P3.this._1();
}
public X _2() {
return f.f(P3.this._2());
}
public C _3() {
return P3.this._3();
}
};
}
/**
* Map the third element of the product.
*
* @param f The function to map with.
* @return A product with the given function applied.
*/
public final P3 map3(final F f) {
return new P3() {
public A _1() {
return P3.this._1();
}
public B _2() {
return P3.this._2();
}
public X _3() {
return f.f(P3.this._3());
}
};
}
/**
* Returns the 1-product projection over the first element.
*
* @return the 1-product projection over the first element.
*/
public final P1 _1_() {
return P3.__1().lazy().f(this);
}
/**
* Returns the 1-product projection over the second element.
*
* @return the 1-product projection over the second element.
*/
public final P1 _2_() {
return P3.__2().lazy().f(this);
}
/**
* Returns the 1-product projection over the third element.
*
* @return the 1-product projection over the third element.
*/
public final P1 _3_() {
return P3.__3().lazy().f(this);
}
/**
* Creates a {@link P4} by adding the given element to the current {@link P3}
*
* @param el the element to append
* @return A {@link P4} containing the original {@link P3} with the extra element added at the end
*/
public final P4 append(D el) {
return P.p(_1(), _2(), _3(), el);
}
/**
* Creates a {@link P5} by adding the given element to the current {@link P3}
*
* @param el the element to append
* @return A {@link P5} containing the original {@link P3} with the extra element added at the end
*/
public final P5 append(P2 el) {
return P.p(_1(), _2(), _3(), el._1(), el._2());
}
/**
* Creates a {@link P6} by adding the given element to the current {@link P3}
*
* @param el the element to append
* @return A {@link P6} containing the original {@link P3} with the extra element added at the end
*/
public final P6 append(P3 el) {
return P.p(_1(), _2(), _3(), el._1(), el._2(), el._3());
}
/**
* Creates a {@link P7} by adding the given element to the current {@link P3}
*
* @param el the element to append
* @return A {@link P7} containing the original {@link P3} with the extra element added at the end
*/
public final P7 append(P4 el) {
return P.p(_1(), _2(), _3(), el._1(), el._2(), el._3(), el._4());
}
/**
* Creates a {@link P8} by adding the given element to the current {@link P3}
*
* @param el the element to append
* @return A {@link P8} containing the original {@link P3} with the extra element added at the end
*/
public final P8 append(P5 el) {
return P.p(_1(), _2(), _3(), el._1(), el._2(), el._3(), el._4(), el._5());
}
/**
* Provides a memoising P3 that remembers its values.
*
* @return A P3 that calls this P3 once for any given element and remembers the value for subsequent calls.
*/
public final P3 memo() {
P3 self = this;
return new P3() {
private final P1 a = weakMemo(self::_1);
private final P1 b = weakMemo(self::_2);
private final P1 c = weakMemo(self::_3);
public A _1() {
return a._1();
}
public B _2() {
return b._1();
}
public C _3() {
return c._1();
}
};
}
/**
* Returns a function that returns the first element of a product.
*
* @return A function that returns the first element of a product.
*/
public static F, A> __1() {
return P3::_1;
}
/**
* Returns a function that returns the second element of a product.
*
* @return A function that returns the second element of a product.
*/
public static F, B> __2() {
return P3::_2;
}
/**
* Returns a function that returns the third element of a product.
*
* @return A function that returns the third element of a product.
*/
public static F, C> __3() {
return P3::_3;
}
@Override
public final String toString() {
return Show.p3Show(Show.anyShow(), Show.anyShow(), Show.anyShow()).showS(this);
}
@Override
public final boolean equals(Object other) {
return Equal.equals0(P3.class, this, other,
() -> Equal.p3Equal(Equal.anyEqual(), Equal.anyEqual(), Equal.anyEqual()));
}
@Override
public final int hashCode() {
return Hash.p3Hash(Hash.anyHash(), Hash.anyHash(), Hash.anyHash()).hash(this);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy