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 + '}'; } }