Created
March 6, 2017 10:04
-
-
Save danielgallegovico/986b82c6d66135ec4baa37b7030e0935 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (C) 2017 Daniel Gallego Vico. | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
import java.util.Objects; | |
/** | |
* Container to ease passing around a tuple of two objects. | |
* This object provides a sensible implementation of equals(), | |
* returning true if equals() is true on each of the contained objects. | |
* | |
* @param <F> First object type to store in the {@link Pair} | |
* @param <S> Second object type to store in the {@link Pair} | |
*/ | |
public class Pair<F, S> { | |
public final F first; | |
public final S second; | |
/** | |
* Constructor. | |
* | |
* @param first The first object in the {@link Pair} | |
* @param second The second object in the {@link Pair} | |
*/ | |
public Pair(F first, S second) { | |
this.first = first; | |
this.second = second; | |
} | |
/** | |
* Checks the two {@link Pair} objects for equality by delegating to their respective | |
* {@link Object#equals(Object)} methods. | |
* | |
* @param o The {@link Pair} to which this one is to be checked for equality | |
* @return true if the underlying objects of the {@link Pair} are considered equal | |
*/ | |
@Override | |
public boolean equals(Object o) { | |
if(!(o instanceof Pair)) { | |
return false; | |
} | |
Pair<?,?> p = (Pair<?,?>) o; | |
return Objects.equals(p.first, first) | |
&& Objects.equals(p.second, second); | |
} | |
/** | |
* Compute a hash code using the hash codes of the underlying objects. | |
* | |
* @return a hashcode on the {@link Pair} | |
*/ | |
@Override | |
public int hashCode() { | |
return (first == null ? 0 : first.hashCode()) | |
^ (second == null ? 0 : second.hashCode()); | |
} | |
/** | |
* Convenience method for creating an appropriately typed {@link Pair}. | |
* | |
* @param a The first object in the {@link Pair} | |
* @param b The second object in the {@link Pair} | |
* @param <A> First object type of the {@link Pair} | |
* @param <B> Second object type of the {@link Pair} | |
* | |
* @return a {@link Pair} that is templatized with the types of a and b | |
*/ | |
public static <A, B> Pair<A, B> create(A a, B b) { | |
return new Pair<>(a, b); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment