56 lines
1.7 KiB
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);
|
|
}
|
|
}
|