package water.util; import java.util.ArrayList; import java.util.List; import water.util.Java7.Objects; /** Pair class with a clearer name than AbstractMap.SimpleEntry. */ // TODO(vlad): add proper comment, have three params public class Triple<V> { public V v1; public V v2; public V v3; public Triple(V v1, V v2, V v3) { this.v1=v1; this.v2=v2; this.v3=v3; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Triple)) return false; Triple<?> triple = (Triple<?>) o; return Objects.equals(v1, triple.v1) && Objects.equals(v2, triple.v2) && Objects.equals(v3, triple.v3); } @Override public int hashCode() { return Objects.hashCode(v1)*2017+Objects.hashCode(v2)*79+Objects.hashCode(v3); } @Override public String toString() { return "Triple(" + v1 +", " + v2 + ", " + v3 + ')'; } static public <V> List<Triple<V>> product(V[] v1s, V[] v2s, V[] v3s) { List<Triple<V>> out = new ArrayList<>(v1s.length*v2s.length*v3s.length); for (V v1 : v1s) for (V v2 : v2s) for (V v3 : v3s) out.add(new Triple<>(v1,v2,v3)); return out; } }