16
16
package org .springframework .data .keyvalue .repository .query ;
17
17
18
18
import java .util .Collection ;
19
+ import java .util .Comparator ;
19
20
import java .util .Iterator ;
20
21
import java .util .Map ;
21
22
import java .util .Objects ;
35
36
import org .springframework .data .repository .query .parser .PartTree ;
36
37
import org .springframework .lang .Nullable ;
37
38
import org .springframework .util .ObjectUtils ;
38
- import org .springframework .util .comparator .NullSafeComparator ;
39
39
40
40
/**
41
41
* {@link AbstractQueryCreator} to create {@link Predicate}-based {@link KeyValueQuery}s.
45
45
*/
46
46
public class PredicateQueryCreator extends AbstractQueryCreator <KeyValueQuery <Predicate <?>>, Predicate <?>> {
47
47
48
+ private static final Comparator <?> COMPARATOR = Comparator .nullsFirst (Comparator .naturalOrder ());
49
+
48
50
public PredicateQueryCreator (PartTree tree , ParameterAccessor parameters ) {
49
51
super (tree , parameters );
50
52
}
@@ -118,6 +120,10 @@ public PredicateBuilder(Part part) {
118
120
this .part = part ;
119
121
}
120
122
123
+ static <T > Comparator <T > comparator () {
124
+ return (Comparator <T >) COMPARATOR ;
125
+ }
126
+
121
127
static PredicateBuilder propertyValueOf (Part part ) {
122
128
return new PredicateBuilder (part );
123
129
}
@@ -152,23 +158,19 @@ public Predicate<Object> isNotNull() {
152
158
}
153
159
154
160
public Predicate <Object > isLessThan (Object value ) {
155
- return new ValueComparingPredicate (part .getProperty (),
156
- o -> NullSafeComparator .NULLS_HIGH .compare (o , value ) == -1 ? true : false );
161
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) == -1 ? true : false );
157
162
}
158
163
159
164
public Predicate <Object > isLessThanEqual (Object value ) {
160
- return new ValueComparingPredicate (part .getProperty (),
161
- o -> NullSafeComparator .NULLS_HIGH .compare (o , value ) <= 0 ? true : false );
165
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) <= 0 ? true : false );
162
166
}
163
167
164
168
public Predicate <Object > isGreaterThan (Object value ) {
165
- return new ValueComparingPredicate (part .getProperty (),
166
- o -> NullSafeComparator .NULLS_HIGH .compare (o , value ) == 1 ? true : false );
169
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) == 1 ? true : false );
167
170
}
168
171
169
172
public Predicate <Object > isGreaterThanEqual (Object value ) {
170
- return new ValueComparingPredicate (part .getProperty (),
171
- o -> NullSafeComparator .NULLS_HIGH .compare (o , value ) >= 0 ? true : false );
173
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) >= 0 ? true : false );
172
174
}
173
175
174
176
public Predicate <Object > matches (Pattern pattern ) {
@@ -271,6 +273,7 @@ public Predicate<Object> startsWith(Object value) {
271
273
}
272
274
273
275
public Predicate <Object > endsWith (Object value ) {
276
+
274
277
return new ValueComparingPredicate (part .getProperty (), o -> {
275
278
276
279
if (!(o instanceof String s )) {
@@ -283,7 +286,6 @@ public Predicate<Object> endsWith(Object value) {
283
286
284
287
return s .toLowerCase ().endsWith (value .toString ().toLowerCase ());
285
288
});
286
-
287
289
}
288
290
}
289
291
0 commit comments