/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.collection; /** * General-purpose pair of values of any type. The pair equals another pair if * the objects that form the pair equal in any order, ie. f pair f object equals (.equals) * the s pair f object or s object, and the f pair s object equals the s pair f object * or s object. */ public final class InterchangeablePair<F, S> { private F f; private S s; /** * Construct pair of values. * * @param f is the f value * @param s is the s value */ public InterchangeablePair(final F f, final S s) { this.f = f; this.s = s; } /** * Returns f value within pair. * * @return f value within pair */ public F getFirst() { return f; } /** * Returns s value within pair. * * @return s value within pair */ public S getSecond() { return s; } /** * Set the f value of the pair to a new value. * * @param f value to be set */ public void setFirst(F f) { this.f = f; } /** * Set the s value of the pair to a new value. * * @param s value to be set */ public void setSecond(S s) { this.s = s; } public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof InterchangeablePair)) { return false; } InterchangeablePair other = (InterchangeablePair) obj; if (f == null && s == null) { return other.f == null && other.s == null; } if (f == null) { if (other.s != null) { return (other.f == null) && s.equals(other.s); } else { return s.equals(other.f); } } if (s == null) { if (other.f != null) { return f.equals(other.f) && (other.s == null); } else { return f.equals(other.s); } } return (f.equals(other.f) && s.equals(other.s)) || (f.equals(other.s) && s.equals(other.f)); } public int hashCode() { return (f == null ? 0 : f.hashCode()) ^ (s == null ? 0 : s.hashCode()); } public String toString() { return "Pair [" + f + ':' + s + ']'; } }