@Override public SpeedmentPredicate<ENTITY> between(E start, E end, Inclusion inclusion) { return toEntityPredicate(e -> { switch (inclusion) { case START_EXCLUSIVE_END_EXCLUSIVE: return e.compareTo(start) > 0 && e.compareTo(end) < 0; case START_EXCLUSIVE_END_INCLUSIVE: return e.compareTo(start) > 0 && e.compareTo(end) <= 0; case START_INCLUSIVE_END_EXCLUSIVE: return e.compareTo(start) >= 0 && e.compareTo(end) < 0; case START_INCLUSIVE_END_INCLUSIVE: return e.compareTo(start) >= 0 && e.compareTo(end) <= 0; default : throw new UnsupportedOperationException( "Unknown inclusion '" + inclusion + "'." ); } }); }
@Override public SpeedmentPredicate<ENTITY> between(E start, E end, Inclusion inclusion) { return toEntityPredicate(e -> { switch (inclusion) { case START_EXCLUSIVE_END_EXCLUSIVE: return e.compareTo(start) > 0 && e.compareTo(end) < 0; case START_EXCLUSIVE_END_INCLUSIVE: return e.compareTo(start) > 0 && e.compareTo(end) <= 0; case START_INCLUSIVE_END_EXCLUSIVE: return e.compareTo(start) >= 0 && e.compareTo(end) < 0; case START_INCLUSIVE_END_INCLUSIVE: return e.compareTo(start) >= 0 && e.compareTo(end) <= 0; default : throw new UnsupportedOperationException( UNKNOWN_INCLUSION + " '" + inclusion + "'." ); } }); }
@Override public SpeedmentPredicate<ENTITY> notBetween(E start, E end, Inclusion inclusion) { return toEntityPredicate(e -> { switch (inclusion) { case START_EXCLUSIVE_END_EXCLUSIVE: return e.compareTo(start) <= 0 || e.compareTo(end) >= 0; case START_EXCLUSIVE_END_INCLUSIVE: return e.compareTo(start) <= 0 || e.compareTo(end) > 0; case START_INCLUSIVE_END_EXCLUSIVE: return e.compareTo(start) < 0 || e.compareTo(end) >= 0; case START_INCLUSIVE_END_INCLUSIVE: return e.compareTo(start) < 0 || e.compareTo(end) > 0; default : throw new UnsupportedOperationException( "Unknown inclusion '" + inclusion + "'." ); } }); }
enum MyEnum { DOG("woof"), CAT("meow"); String sound; MyEnum(String s) { sound = s; } } class MyEnumComparator implements Comparator<MyEnum> { public int compare(MyEnum o1, MyEnum o2) { return -o1.compareTo(o2); // this flips the order return o1.sound.length() - o2.sound.length(); // this compares length } }
@Override public SpeedmentPredicate<ENTITY> notEqual(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) != 0); }
@Override public SpeedmentPredicate<ENTITY> lessThan(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) < 0); }
@Override public SpeedmentPredicate<ENTITY> equal(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) == 0); }
@Override public SpeedmentPredicate<ENTITY> lessThan(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) < 0); }
@Override public SpeedmentPredicate<ENTITY> lessOrEqual(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) <= 0); }
@Override public SpeedmentPredicate<ENTITY> greaterThan(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) > 0); }
@Override public SpeedmentPredicate<ENTITY> greaterThan(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) > 0); }
@Override public SpeedmentPredicate<ENTITY> equal(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) == 0); }
@Override public SpeedmentPredicate<ENTITY> greaterOrEqual(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) >= 0); }
@Override public SpeedmentPredicate<ENTITY> notEqual(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) != 0); }
@Override public SpeedmentPredicate<ENTITY> lessOrEqual(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) <= 0); }
@Override public SpeedmentPredicate<ENTITY> greaterOrEqual(E value) { return toEntityPredicate(e -> e != null && e.compareTo(value) >= 0); }
@Override public int compare(ENTITY first, ENTITY second) { final E f = get(first); final E s = get(second); if (f == null && s == null) return 0; else if (f == null) return 1; else if (s == null) return -1; else return f.compareTo(s); }
@Override default int compare(T first, T second) { final E a = apply(first); final E b = apply(second); if (a == null) { return (b == null) ? -1 : 0; } else { return a.compareTo(b); } }
@Override public int compare(ENTITY first, ENTITY second) { final E f = get(first); final E s = get(second); if (f == null && s == null) return 0; else if (f == null) return 1; else if (s == null) return -1; else return f.compareTo(s); }
@Override default int compare(T first, T second) { return apply(first).compareTo(apply(second)); }