package fr.openwide.core.commons.util.functional; import java.util.Date; import java.util.Objects; import com.google.common.base.Equivalence; public final class Equivalences { private Equivalences() { } @SuppressWarnings({ "unchecked", "rawtypes" }) public static <C extends Comparable> Equivalence<C> comparable() { return (Equivalence<C>) COMPARABLE_EQUIVALENCE; } @SuppressWarnings({ "unchecked", "rawtypes" }) private static final Equivalence<? extends Comparable> COMPARABLE_EQUIVALENCE = new AbstractSerializableEquivalence<Comparable>() { private static final long serialVersionUID = -6403530720447387732L; @Override protected boolean doEquivalent(Comparable left, Comparable right) { return left == null ? (right == null) : (right != null && left.compareTo(right) == 0); } @Override protected int doHash(Comparable object) { return Objects.hash(object); } private Object readResolve() { return COMPARABLE_EQUIVALENCE; } }; public static Equivalence<Date> date() { return DATE_EQUIVALENCE; } private static final Equivalence<Date> DATE_EQUIVALENCE = new AbstractSerializableEquivalence<Date>() { private static final long serialVersionUID = 8680281926385852199L; @Override protected boolean doEquivalent(Date left, Date right) { return left.getTime() == right.getTime(); } @Override protected int doHash(Date object) { long ht = object.getTime(); return (int) ht ^ (int) (ht >> 32); } private Object readResolve() { return DATE_EQUIVALENCE; } }; }