From 7c00cad4c90da8b43c979707b34793edb09ba39b Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 7 Jun 2022 00:38:09 -0700 Subject: [PATCH] add Pair function API --- .../terra/api/util/generic/pair/Pair.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java b/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java index 58d1e7353..ad4c2c879 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/generic/pair/Pair.java @@ -11,6 +11,10 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; 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 { @@ -18,6 +22,38 @@ public final class Pair { private final L left; private final R right; + public static Function, Pair> mapLeft(Function function) { + return pair -> of(function.apply(pair.left), pair.right); + } + + public static Function, Pair> mapRight(Function function) { + return pair -> of(pair.left, function.apply(pair.right)); + } + + public static Predicate> testLeft(Predicate predicate) { + return pair -> predicate.test(pair.left); + } + + public static Predicate> testRight(Predicate predicate) { + return pair -> predicate.test(pair.right); + } + + public static Consumer> consumeLeft(Consumer consumer) { + return pair -> consumer.accept(pair.left); + } + + public static Consumer> consumeRight(Consumer consumer) { + return pair -> consumer.accept(pair.right); + } + + public static Function, R> unwrapRight() { + return pair -> pair.right; + } + + public static Function, L> unwrapLeft() { + return pair -> pair.left; + } + private Pair(L left, R right) { this.left = left; this.right = right; @@ -108,4 +144,9 @@ public final class Pair { return Objects.equals(this.left, that.left) && Objects.equals(this.right, that.right); } } + + @Override + public String toString() { + return String.format("{%s,%s}", left, right); + } }