package uk.ac.rhul.cs.utils;
/**
* Lightweight class that holds a sequence number and another object. Objects like this
* are primarily used to make the clusters in the output of the ClusterONE algorithm
* appear in the same order as their seeds were generated by the seed generator, but they
* may have other uses as well.
*
* Ordered objects are comparable with each other based on their sequence numbers. Two
* ordered objects are semantically equal if their sequence numbers are equal and
* their wrapped objects are semantically equal.
*/
public final class Ordered<T> implements Comparable<Ordered<T>> {
/**
* The sequence number.
*/
public int sequenceNumber;
/**
* The object held in this wrapper.
*/
public T object;
/**
* Constructor.
*/
public Ordered(int sequenceNumber, T object) {
this.object = object;
this.sequenceNumber = sequenceNumber;
}
@Override
public int compareTo(Ordered other) {
return this.sequenceNumber - other.sequenceNumber;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Ordered ordered = (Ordered) o;
if (sequenceNumber != ordered.sequenceNumber) return false;
if (object != null ? !object.equals(ordered.object) : ordered.object != null) return false;
return true;
}
@Override
public int hashCode() {
int result = sequenceNumber;
result = 31 * result + (object != null ? object.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "Ordered{" +
"sequenceNumber=" + sequenceNumber +
", object=" + object +
'}';
}
}