@@ -0,0 +1,1268 @@
+package co.phoenixlab.common.lang;%0A%0Aimport java.util.Objects;%0A%0Apublic class OrderedPair%3CT, U%3E %7B%0A%0A    private final T t;%0A    private final U u;%0A%0A    public OrderedPair(T t, U u) %7B%0A        this.t = t;%0A        this.u = u;%0A    %7D%0A%0A    public T getT() %7B%0A        return t;%0A    %7D%0A%0A    public U getU() %7B%0A        return u;%0A    %7D%0A%0A    @Override%0A    public boolean equals(Object o) %7B%0A        if (this == o) %7B%0A            return true;%0A        %7D%0A        if (o == null %7C%7C getClass() != o.getClass()) %7B%0A            return false;%0A        %7D%0A        OrderedPair%3C?, ?%3E that = (OrderedPair%3C?, ?%3E) o;%0A        return Objects.equals(t, that.t) &&%0A                Objects.equals(u, that.u);%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        return Objects.hash(t, u);%0A    %7D%0A%0A    /**%0A     * Creates an ordered pair with the given elements. Equivalent to %7B@link #OrderedPair(Object, Object)%7D.%0A     */%0A    public static %3CT, U%3E OrderedPair%3CT, U%3E pair(T t, U u) %7B%0A        return new OrderedPair%3C%3E(t, u);%0A    %7D%0A%0A    /**%0A     * Creates an ordered pair of an object and itself. Equivalent to calling %7B@link #OrderedPair(Object, Object)%7D with%0A     * the same object for both arguments.%0A     */%0A    public static %3CT%3E OrderedPair%3CT, T%3E twin(T t) %7B%0A        return new OrderedPair%3C%3E(t, t);%0A    %7D%0A%0A%7D%0A

Add ordered pair (2-tuple)