diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/ResultTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/ResultTests.java index bb64a365b3..de21ce97ee 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/ResultTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/ResultTests.java @@ -79,7 +79,13 @@ extends BaseTest result = create().fetch(TBook()); - class C implements Comparator { + assertTrue(result == result.sortAsc(TBook_ID())); + assertEquals(asList(1, 2, 3, 4), result.getValues(TBook_ID())); + + assertTrue(result == result.sortDesc(TBook_ID())); + assertEquals(asList(4, 3, 2, 1), result.getValues(TBook_ID())); + + class C1 implements Comparator { @Override public int compare(Integer o1, Integer o2) { @@ -92,16 +98,26 @@ extends BaseTest { + + private final C1 c1 = new C1(); + + @Override + public int compare(B book1, B book2) { + return c1.compare(book1.getValue(TBook_ID()), book2.getValue(TBook_ID())); + } + } + + assertTrue(result == result.sortAsc(new C2())); + assertEquals(asList(2, 3, 4, 1), result.getValues(TBook_ID())); + + assertTrue(result == result.sortDesc(new C2())); assertEquals(asList(1, 4, 3, 2), result.getValues(TBook_ID())); } } diff --git a/jOOQ/src/main/java/org/jooq/Result.java b/jOOQ/src/main/java/org/jooq/Result.java index 3458f41786..1af2f796be 100644 --- a/jOOQ/src/main/java/org/jooq/Result.java +++ b/jOOQ/src/main/java/org/jooq/Result.java @@ -1918,4 +1918,20 @@ public interface Result extends FieldProvider, List, Attach * @return The result itself */ Result sortDesc(Field field, java.util.Comparator comparator); + + /** + * Sort this result using a comparator that can compare records. + * + * @param comparator The comparator used to sort this result. + * @return The result itself + */ + Result sortAsc(java.util.Comparator comparator); + + /** + * Reverse-sort this result using a comparator that can compare records. + * + * @param comparator The comparator used to sort this result. + * @return The result itself + */ + Result sortDesc(java.util.Comparator comparator); } diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index b8ae613615..433c55c2e2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -1330,7 +1330,12 @@ class ResultImpl implements Result, AttachableInternal { @Override public final Result sortAsc(Field field, Comparator comparator) { - Collections.sort(this, new RecordComparator(getIndex(field), comparator)); + return sortAsc(new RecordComparator(getIndex(field), comparator)); + } + + @Override + public final Result sortAsc(Comparator comparator) { + Collections.sort(this, comparator); return this; } @@ -1344,10 +1349,15 @@ class ResultImpl implements Result, AttachableInternal { return sortAsc(field, Collections.reverseOrder(comparator)); } + @Override + public final Result sortDesc(Comparator comparator) { + return sortAsc(Collections.reverseOrder(comparator)); + } + /** * A comparator for records, wrapping another comparator for <T> */ - private class RecordComparator implements Comparator { + private static class RecordComparator implements Comparator { private final Comparator comparator; private final int fieldIndex; @@ -1367,7 +1377,7 @@ class ResultImpl implements Result, AttachableInternal { /** * A natural comparator */ - private class NaturalComparator> implements Comparator { + private static class NaturalComparator> implements Comparator { @Override public int compare(T o1, T o2) {