46 lines
1.9 KiB
Java
46 lines
1.9 KiB
Java
package io.gitlab.jfronny.commons.tuple;
|
|
|
|
import org.jetbrains.annotations.Contract;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
import java.util.Objects;
|
|
import java.util.function.Function;
|
|
|
|
public record Quadruple<T1, T2, T3, T4>(@Nullable T1 val1, @Nullable T2 val2, @Nullable T3 val3, @Nullable T4 val4) {
|
|
@Contract(pure = true) @NotNull
|
|
public static <T1, T2, T3, T4> Quadruple<T1, T2, T3, T4> of(@Nullable T1 val1, @Nullable T2 val2, @Nullable T3 val3, @Nullable T4 val4) {
|
|
return new Quadruple<>(val1, val2, val3, val4);
|
|
}
|
|
|
|
@Contract(pure = true) @NotNull
|
|
public static <T1, T2, T3, T4> Quadruple<T1, T2, T3, T4> of(@NotNull Tuple<T1, T2> left, @NotNull Tuple<T3, T4> right) {
|
|
return new Quadruple<>(left.left(), left.right(), right.left(), right.right());
|
|
}
|
|
|
|
@Contract(pure = true) @NotNull
|
|
public Tuple<Tuple<T1, T2>, Tuple<T3, T4>> slice() {
|
|
return new Tuple<>(new Tuple<>(val1, val2), new Tuple<>(val3, val4));
|
|
}
|
|
|
|
@Contract(pure = true) @NotNull
|
|
public <T> Quadruple<T, T2, T3, T4> map1(@NotNull Function<T1, T> mapper) {
|
|
return new Quadruple<>(Objects.requireNonNull(mapper).apply(val1), val2, val3, val4);
|
|
}
|
|
|
|
@Contract(pure = true) @NotNull
|
|
public <T> Quadruple<T1, T, T3, T4> map2(@NotNull Function<T2, T> mapper) {
|
|
return new Quadruple<>(val1, Objects.requireNonNull(mapper).apply(val2), val3, val4);
|
|
}
|
|
|
|
@Contract(pure = true) @NotNull
|
|
public <T> Quadruple<T1, T2, T, T4> map3(@NotNull Function<T3, T> mapper) {
|
|
return new Quadruple<>(val1, val2, Objects.requireNonNull(mapper).apply(val3), val4);
|
|
}
|
|
|
|
@Contract(pure = true) @NotNull
|
|
public <T> Quadruple<T1, T2, T3, T> map4(@NotNull Function<T4, T> mapper) {
|
|
return new Quadruple<>(val1, val2, val3, Objects.requireNonNull(mapper).apply(val4));
|
|
}
|
|
}
|