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;