@@ -0,0 +1,1488 @@
+package total;%0A%0Aimport java.util.Objects;%0Aimport java.util.Optional;%0Aimport java.util.function.Consumer;%0Aimport java.util.function.Function;%0A%0Apublic final class Pair%3CL, R%3E %7B%0A    public final L left;%0A    public final R right;%0A%0A    private Pair(L l, R r) %7B%0A        left = l;%0A        right = r;%0A    %7D%0A%0A    public static %3CL, R%3E Pair%3CL, R%3E of(L l, R r) %7B%0A        return new Pair%3CL, R%3E(l, r);%0A    %7D%0A%0A    public %3CB%3E Pair%3CB, R%3E leftMap(Function%3CL, B%3E f) %7B%0A        return new Pair%3CB, R%3E(f.apply(left), right);%0A    %7D%0A%0A    public %3CB%3E Pair%3CL, B%3E rightMap(Function%3CR, B%3E f) %7B%0A        return new Pair%3CL, B%3E(left, f.apply(right));%0A    %7D%0A%0A    public %3CB%3E Optional%3CPair%3CB, R%3E%3E leftOptMap(Function%3CL, Optional%3CB%3E%3E f) %7B%0A        return f.apply(left).map(l -%3E new Pair%3CB, R%3E(l, right));%0A    %7D%0A%0A    public %3CB%3E Optional%3CPair%3CL, B%3E%3E rightOptMap(Function%3CR, Optional%3CB%3E%3E f) %7B%0A        return f.apply(right).map(r -%3E new Pair%3CL, B%3E(left, r));%0A    %7D%0A%0A    @Override%0A    public String toString() %7B%0A        return %22Pair(%22 + left + %22, %22 + right + %22)%22;%0A    %7D%0A%0A    @Override%0A    public boolean equals(Object value) %7B%0A        if (value == this) return true;%0A        if (value instanceof Pair) %7B%0A            @SuppressWarnings(%22unchecked%22)%0A            Pair%3CL, R%3E pair = (Pair%3CL, R%3E) value;%0A            return Objects.equals(left, pair.left)%0A                && Objects.equals(right, pair.right);%0A        %7D%0A        return false;%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        return Objects.hash(left, right);%0A    %7D%0A%7D%0A

Add Pair class