package sk.stuba.fiit.perconik.utilities.function; import java.io.Serializable; import javax.annotation.Nullable; import com.google.common.base.Function; import static com.google.common.base.Preconditions.checkNotNull; public final class Numerates { private Numerates() {} private static final class NumerateFunction<T> implements Function<T, Integer>, Serializable { private static final long serialVersionUID = 0L; private final Numerate<T> numerate; NumerateFunction(final Numerate<T> numerate) { this.numerate = checkNotNull(numerate); } @Override public Integer apply(@Nullable final T input) { return this.numerate.apply(input); } @Override public boolean equals(@Nullable final Object o) { if (o instanceof NumerateFunction) { NumerateFunction<?> other = (NumerateFunction<?>) o; return this.numerate.equals(other.numerate); } return false; } @Override public int hashCode() { return this.numerate.hashCode(); } @Override public String toString() { return "forNumerate(" + this.numerate + ")"; } } public static <T> Function<T, Integer> asFunction(final Numerate<T> numerate) { return new NumerateFunction<>(numerate); } }