package com.linkedin.parseq.function; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Objects; public class Tuple2<T1, T2> implements Tuple { private final T1 _1; private final T2 _2; public Tuple2(final T1 t1, final T2 t2) { _1 = t1; _2 = t2; } public T1 _1() { return _1; } public T2 _2() { return _2; } public <C> C map(final Function2<T1, T2, C> f) throws Exception { return f.apply(_1, _2); } @Override public Iterator<Object> iterator() { return new Iterator<Object>() { private int _index = 0; @Override public boolean hasNext() { return _index < arity(); } @Override public Object next() { switch(_index) { case 0: _index++; return _1; case 1: _index++; return _2; } throw new NoSuchElementException(); } }; } @Override public int arity() { return 2; } @Override public boolean equals(Object other) { if(other instanceof Tuple2) { Tuple2<?, ?> that = (Tuple2<?, ?>) other; return Objects.equals(this._1, that._1) && Objects.equals(this._2, that._2); } else { return false; } } @Override public int hashCode() { return Objects.hash(_1, _2); } @Override public String toString() { return "(" + Objects.toString(_1) + ", " + Objects.toString(_2) + ")"; } }