java-commons/src/main/java/io/gitlab/jfronny/commons/tuple/Quadruple.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));
}
}