add Pair function API

This commit is contained in:
dfsek
2022-06-07 00:38:09 -07:00
parent 5d703327db
commit 7c00cad4c9

View File

@@ -11,6 +11,10 @@ import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Objects; import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.UnaryOperator;
public final class Pair<L, R> { public final class Pair<L, R> {
@@ -18,6 +22,38 @@ public final class Pair<L, R> {
private final L left; private final L left;
private final R right; private final R right;
public static <L, R, T> Function<Pair<L, R>, Pair<T, R>> mapLeft(Function<L, T> function) {
return pair -> of(function.apply(pair.left), pair.right);
}
public static <L, R, T> Function<Pair<L, R>, Pair<L, T>> mapRight(Function<R, T> function) {
return pair -> of(pair.left, function.apply(pair.right));
}
public static <L> Predicate<Pair<L, ?>> testLeft(Predicate<L> predicate) {
return pair -> predicate.test(pair.left);
}
public static <R> Predicate<Pair<?, R>> testRight(Predicate<R> predicate) {
return pair -> predicate.test(pair.right);
}
public static <L> Consumer<Pair<L, ?>> consumeLeft(Consumer<L> consumer) {
return pair -> consumer.accept(pair.left);
}
public static <R> Consumer<Pair<?, R>> consumeRight(Consumer<R> consumer) {
return pair -> consumer.accept(pair.right);
}
public static <R> Function<Pair<?, R>, R> unwrapRight() {
return pair -> pair.right;
}
public static <L> Function<Pair<L, ?>, L> unwrapLeft() {
return pair -> pair.left;
}
private Pair(L left, R right) { private Pair(L left, R right) {
this.left = left; this.left = left;
this.right = right; this.right = right;
@@ -108,4 +144,9 @@ public final class Pair<L, R> {
return Objects.equals(this.left, that.left) && Objects.equals(this.right, that.right); return Objects.equals(this.left, that.left) && Objects.equals(this.right, that.right);
} }
} }
@Override
public String toString() {
return String.format("{%s,%s}", left, right);
}
} }