diff --git a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/comparator/CombinedComparator.java b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/comparator/CombinedComparator.java index 649429000f..effef1e2e5 100644 --- a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/comparator/CombinedComparator.java +++ b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/comparator/CombinedComparator.java @@ -6,9 +6,6 @@ /** * A combined {@link Comparator} that compares a number of * {@link FieldComparator FieldComparators} in sequence. - *

- * Equality is determined by checking if every comparator in the sequence is - * equal and that the {@link #isReversed()}-flag is the same. * * @param the entity type * @@ -20,15 +17,6 @@ public interface CombinedComparator extends Comparator { @Override CombinedComparator reversed(); - /** - * Returns {@code true} if the result of applying the comparators in the - * {@link #stream()} should be reversed to produce the same result as - * {@link #compare(Object, Object)}. - * - * @return if this comparator is reversed - */ - boolean isReversed(); - /** * Returns the comparators ordered so that the first comparator is * the most significant, and if that evaluates to {@code 0}, continue on to diff --git a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/comparator/CombinedComparatorImpl.java b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/comparator/CombinedComparatorImpl.java index 291b4d2a0a..f10931b2a4 100644 --- a/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/comparator/CombinedComparatorImpl.java +++ b/runtime-parent/runtime-field/src/main/java/com/speedment/runtime/field/internal/comparator/CombinedComparatorImpl.java @@ -16,6 +16,7 @@ import java.util.function.ToDoubleFunction; import java.util.function.ToIntFunction; import java.util.function.ToLongFunction; +import java.util.stream.Collectors; import java.util.stream.Stream; import static java.util.Objects.requireNonNull; @@ -30,20 +31,11 @@ public final class CombinedComparatorImpl implements CombinedComparator { private final List> comparators; - private final boolean reversed; public CombinedComparatorImpl( final List> comparators) { - this(comparators, false); - } - - private CombinedComparatorImpl( - final List> comparators, - final boolean reversed) { - this.comparators = requireNonNull(comparators); - this.reversed = reversed; } @Override @@ -60,20 +52,18 @@ public int size() { public int compare(ENTITY o1, ENTITY o2) { for (final FieldComparator comp : comparators) { final int c = comp.compare(o1, o2); - if (c != 0) return isReversed() ? -c : c; + if (c != 0) return c; } return 0; } - @Override - public boolean isReversed() { - return reversed; - } - @Override public CombinedComparator reversed() { - return new CombinedComparatorImpl<>(comparators, !reversed); + return new CombinedComparatorImpl<>(comparators.stream() + .map(FieldComparator::reversed) + .collect(Collectors.toList()) + ); } @Override @@ -83,8 +73,8 @@ public Comparator thenComparing(Comparator other) { @Override public Comparator thenComparing( - Function keyExtractor, - Comparator keyComparator) { + final Function keyExtractor, + final Comparator keyComparator) { if (keyExtractor instanceof Getter) { @SuppressWarnings("unchecked") @@ -98,12 +88,10 @@ public Comparator thenComparing( return (a, b) -> { final int c = compare(a, b); if (c == 0) { - final int c2 = keyComparator.compare( + return keyComparator.compare( keyExtractor.apply(a), keyExtractor.apply(b) ); - - return reversed ? -c2 : c2; } else return c; }; } @@ -128,12 +116,11 @@ public Comparator thenComparing( if (oa == null && ob == null) { return 0; } else if (oa == null) { - return reversed ? -1 : 1; + return 1; } else if (ob == null) { - return reversed ? 1 : -1; + return -1; } else { - final int c2 = oa.compareTo(ob); - return reversed ? -c2 : c2; + return oa.compareTo(ob); } } else return c; }; @@ -156,8 +143,7 @@ public Comparator thenComparing( if (c == 0) { final int oa = keyExtractor.applyAsInt(a); final int ob = keyExtractor.applyAsInt(b); - final int c2 = Integer.compare(oa, ob); - return reversed ? -c2 : c2; + return Integer.compare(oa, ob); } else return c; }; } @@ -179,8 +165,7 @@ public Comparator thenComparing( if (c == 0) { final long oa = keyExtractor.applyAsLong(a); final long ob = keyExtractor.applyAsLong(b); - final int c2 = Long.compare(oa, ob); - return reversed ? -c2 : c2; + return Long.compare(oa, ob); } else return c; }; } @@ -202,8 +187,7 @@ public Comparator thenComparing( if (c == 0) { final double oa = keyExtractor.applyAsDouble(a); final double ob = keyExtractor.applyAsDouble(b); - final int c2 = Double.compare(oa, ob); - return reversed ? -c2 : c2; + return Double.compare(oa, ob); } else return c; }; } @@ -214,8 +198,6 @@ public boolean equals(Object o) { if (!(o instanceof CombinedComparator)) return false; final CombinedComparator that = (CombinedComparator) o; - if (isReversed() != that.isReversed()) return false; - final Iterator> it = comparators.iterator(); @@ -226,15 +208,12 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 31 * comparators.hashCode() + (isReversed() ? 1 : 0); + return 1299827 * comparators.hashCode(); } @Override public String toString() { - return "CombinedComparatorImpl{" + - "comparators=" + comparators + - ", reversed=" + reversed + - '}'; + return "CombinedComparatorImpl" + comparators; } private Comparator then(Comparator other) { @@ -245,16 +224,14 @@ private Comparator then(Comparator other) { final List> copy = new ArrayList<>(comparators); - copy.add(reversed ? fc.reversed() : fc); - return new CombinedComparatorImpl<>(copy, reversed); + copy.add(fc); + + return new CombinedComparatorImpl<>(copy); } else { return (a, b) -> { final int c = compare(a, b); - if (c == 0) { - final int c2 = other.compare(a, b); - return reversed ? -c2 : c2; - } else return c; + return c == 0 ? other.compare(a, b) : c; }; } } @@ -266,43 +243,43 @@ Optional> then(Getter getter) { @SuppressWarnings("unchecked") final GetByte casted = (GetByte) getter; return Optional.of(then(new ByteFieldComparatorImpl<>( - casted.getField(), reversed) + casted.getField()) )); } else if (getter instanceof GetShort) { @SuppressWarnings("unchecked") final GetShort casted = (GetShort) getter; return Optional.of(then(new ShortFieldComparatorImpl<>( - casted.getField(), reversed) + casted.getField()) )); } else if (getter instanceof GetInt) { @SuppressWarnings("unchecked") final GetInt casted = (GetInt) getter; return Optional.of(then(new IntFieldComparatorImpl<>( - casted.getField(), reversed) + casted.getField()) )); } else if (getter instanceof GetLong) { @SuppressWarnings("unchecked") final GetLong casted = (GetLong) getter; return Optional.of(then(new LongFieldComparatorImpl<>( - casted.getField(), reversed) + casted.getField()) )); } else if (getter instanceof GetFloat) { @SuppressWarnings("unchecked") final GetFloat casted = (GetFloat) getter; return Optional.of(then(new FloatFieldComparatorImpl<>( - casted.getField(), reversed) + casted.getField()) )); } else if (getter instanceof GetDouble) { @SuppressWarnings("unchecked") final GetDouble casted = (GetDouble) getter; return Optional.of(then(new DoubleFieldComparatorImpl<>( - casted.getField(), reversed) + casted.getField()) )); } else if (getter instanceof GetChar) { @SuppressWarnings("unchecked") final GetChar casted = (GetChar) getter; return Optional.of(then(new CharFieldComparatorImpl<>( - casted.getField(), reversed) + casted.getField()) )); } else if (getter instanceof GetReference) { @SuppressWarnings("unchecked") @@ -311,8 +288,7 @@ Optional> then(Getter getter) { if (field instanceof ComparableField) { return Optional.of(then(new ReferenceFieldComparatorImpl<>( (ComparableField) casted.getField(), - NullOrder.LAST, - reversed + NullOrder.LAST ))); } }