From a45873e98a42235e4de4bdf746a136d4cf5a017d Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 10 Jun 2021 14:59:27 +0200 Subject: [PATCH] =?UTF-8?q?Allow=20combining=20Sort=20and=20TypedSort=20us?= =?UTF-8?q?ing=20Sort.and(=E2=80=A6).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now retain properly the collection of orders by using accessor methods instead of relying on using the orders field. TypedSort orders are not using the orders field, instead they iterate over recorded persistent property paths. Closes #2103 Original pull request: #2377. --- .../java/org/springframework/data/domain/Sort.java | 10 +++++----- .../springframework/data/domain/SortUnitTests.java | 13 +++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/data/domain/Sort.java b/src/main/java/org/springframework/data/domain/Sort.java index 39ccbc8ee..93705ab68 100644 --- a/src/main/java/org/springframework/data/domain/Sort.java +++ b/src/main/java/org/springframework/data/domain/Sort.java @@ -170,7 +170,7 @@ public class Sort implements Streamable these = new ArrayList<>(this.orders); + ArrayList these = new ArrayList<>(this.toList()); for (Order order : sort) { these.add(order); @@ -240,7 +240,7 @@ public class Sort implements Streamable new Order(direction, it.getProperty())).collect(Collectors.toList())); + return Sort.by(stream().map(it -> new Order(direction, it.getProperty())).collect(Collectors.toList())); } /** diff --git a/src/test/java/org/springframework/data/domain/SortUnitTests.java b/src/test/java/org/springframework/data/domain/SortUnitTests.java index 605b76390..7938a1684 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 java.util.Collection; 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 @@ import org.springframework.data.domain.Sort.Order; * @author Kevin Raymond * @author Thomas Darimont * @author Mark Paluch + * @author Hiufung Kwok */ class SortUnitTests { @@ -186,6 +188,17 @@ class SortUnitTests { .containsExactly(Order.by("nesteds.firstname")); } + @Test // #2103 + void allowsCombiningTypedSorts() { + + assertThat(Sort.sort(Circle.class).by(Circle::getCenter) // + .and(Sort.sort(Circle.class).by(Circle::getRadius))) // + .containsExactly(Order.by("center"), Order.by("radius")); + + assertThat(Sort.by("center").and(Sort.sort(Circle.class).by(Circle::getRadius))) // + .containsExactly(Order.by("center"), Order.by("radius")); + } + @Getter static class Sample { Nested nested;