diff --git a/src/main/java/org/springframework/data/domain/Sort.java b/src/main/java/org/springframework/data/domain/Sort.java index 39ccbc8eec..e427428cf0 100644 --- a/src/main/java/org/springframework/data/domain/Sort.java +++ b/src/main/java/org/springframework/data/domain/Sort.java @@ -40,6 +40,7 @@ * @author Oliver Gierke * @author Thomas Darimont * @author Mark Paluch + * @author Hiufung Kwok */ public class Sort implements Streamable, Serializable { @@ -188,7 +189,7 @@ public Sort and(Sort sort) { Assert.notNull(sort, "Sort must not be null!"); - ArrayList these = new ArrayList<>(this.orders); + ArrayList these = new ArrayList<>(this.getOrders()); for (Order order : sort) { these.add(order); @@ -264,6 +265,10 @@ public String toString() { return orders.isEmpty() ? "UNSORTED" : StringUtils.collectionToCommaDelimitedString(orders); } + public List getOrders() { + return orders; + } + /** * Creates a new {@link Sort} with the current setup but the given order direction. * @@ -721,6 +726,14 @@ public Iterator iterator() { } + @Override + public List getOrders() { + + return recorded.getPropertyPath() // + .map(Sort::by) // + .orElseGet(Sort::unsorted).getOrders(); + } + /* * (non-Javadoc) * @see org.springframework.data.domain.Sort#toString() diff --git a/src/test/java/org/springframework/data/domain/SortUnitTests.java b/src/test/java/org/springframework/data/domain/SortUnitTests.java index 605b763907..4b709ae25f 100755 --- a/src/test/java/org/springframework/data/domain/SortUnitTests.java +++ b/src/test/java/org/springframework/data/domain/SortUnitTests.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; +import org.springframework.data.geo.Circle; /** * Unit test for {@link Sort}. @@ -33,6 +34,7 @@ * @author Kevin Raymond * @author Thomas Darimont * @author Mark Paluch + * @author Hiufung Kwok */ class SortUnitTests { @@ -94,6 +96,13 @@ void allowsCombiningSorts() { assertThat(sort).containsExactly(Order.by("foo"), Order.by("bar")); } + @Test //DATACMNS-1704 + void allowsCombiningTypedSorts() { + Sort sort = Sort.sort(Circle.class).by(Circle::getCenter) + .and(Sort.sort(Circle.class).by(Circle::getRadius)); + assertThat(sort).containsExactly(Order.by("center"), Order.by("radius")); + } + @Test void handlesAdditionalNullSort() {