java-commons/src/main/java/io/gitlab/jfronny/commons/tuple/Triple.java

56 lines
1.7 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 Triple<T1, T2, T3>(@Nullable T1 val1, @Nullable T2 val2, @Nullable T3 val3) {
@Contract(pure = true) @NotNull
public static <T1, T2, T3> Triple<T1, T2, T3> of(@Nullable T1 val1, @Nullable T2 val2, @Nullable T3 val3) {
return new Triple<>(val1, val2, val3);
}
@Contract(pure = true) @NotNull
public <T> Triple<T, T2, T3> map1(@NotNull Function<T1, T> mapper) {
return new Triple<>(Objects.requireNonNull(mapper).apply(val1), val2, val3);
}
@Contract(pure = true) @NotNull
public <T> Triple<T1, T, T3> map2(@NotNull Function<T2, T> mapper) {
return new Triple<>(val1, Objects.requireNonNull(mapper).apply(val2), val3);
}
@Contract(pure = true) @NotNull
public <T> Triple<T1, T2, T> map3(@NotNull Function<T3, T> mapper) {
return new Triple<>(val1, val2, Objects.requireNonNull(mapper).apply(val3));
}
@Contract(pure = true) @NotNull
public Triple<T2, T3, T1> lShift() {
return new Triple<>(val2, val3, val1);
}
@Contract(pure = true) @NotNull
public Triple<T3, T1, T2> rShift() {
return new Triple<>(val3, val1, val2);
}
@Contract(pure = true) @NotNull
public Triple<T2, T1, T3> swapL() {
return new Triple<>(val2, val1, val3);
}
@Contract(pure = true) @NotNull
public Triple<T1, T3, T2> swapR() {
return new Triple<>(val1, val3, val2);
}
@Contract(pure = true) @NotNull
public Triple<T3, T2, T1> reverse() {
return new Triple<>(val3, val2, val1);
}
}