Elem.java
package no.motif.single;
import java.io.Serializable;
import java.util.Objects;
import no.motif.f.Fn;
/**
* A simple container for a value coupled with an index.
*
* @param <T> The type of the containing value.
*/
public final class Elem<T> implements Serializable {
public final int index;
public final T value;
public static <T> Elem<T> of(int index, T value) {
return new Elem<T>(index, value);
}
private Elem(int index, T value) {
this.index = index;
this.value = value;
}
@Override
public boolean equals(Object o) {
if (o instanceof Elem) {
Elem<?> another = (Elem<?>) o;
return this.index == another.index && Objects.equals(this.value, another.value);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(index, value);
}
@Override
public String toString() {
return "[" + index + ": " + value + "]";
}
public static <T> Fn<T, Elem<T>> withIndex(final int index) { return new Fn<T, Elem<T>>() {
@Override public Elem<T> $(T value) { return new Elem<T>(index, value); }}; }
}