diff --git a/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/UserSpecificationsBuilder.java b/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/UserSpecificationsBuilder.java index def31a23c5..28097d500a 100644 --- a/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/UserSpecificationsBuilder.java +++ b/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/UserSpecificationsBuilder.java @@ -45,26 +45,17 @@ public final class UserSpecificationsBuilder { } public Specification build() { - if (params.size() == 0) return null; - final List> specs = params.stream() - .map(UserSpecification::new) - .collect(Collectors.toList()); - - Specification result = specs.get(0); - + Specification result = new UserSpecification(params.get(0)); + for (int i = 1; i < params.size(); i++) { - result = params.get(i) - .isOrPredicate() - ? Specifications.where(result) - .or(specs.get(i)) - : Specifications.where(result) - .and(specs.get(i)); - + result = params.get(i).isOrPredicate() + ? Specifications.where(result).or(new UserSpecification(params.get(i))) + : Specifications.where(result).and(new UserSpecification(params.get(i))); } - + return result; } diff --git a/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecBuilder.java b/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecBuilder.java index 960792a4b9..ce5a4410b9 100644 --- a/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecBuilder.java +++ b/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecBuilder.java @@ -31,16 +31,17 @@ public class GenericRsqlSpecBuilder { .filter(Objects::nonNull) .collect(Collectors.toList()); - Specifications initialSpec = specs.stream().findFirst().get(); - - Specifications result = specs.stream().skip(1).reduce(initialSpec, (firstSpec, secondSpec) -> { - if (logicalNode.getOperator() == LogicalOperator.AND) { - return Specifications.where(firstSpec).and(secondSpec); - } else if (logicalNode.getOperator() == LogicalOperator.OR) { - return Specifications.where(firstSpec).or(secondSpec); - } - return firstSpec; - }); + Specifications result = specs.get(0); + if (logicalNode.getOperator() == LogicalOperator.AND) { + for (int i = 1; i < specs.size(); i++) { + result = Specifications.where(result).and(specs.get(i)); + } + } + else if (logicalNode.getOperator() == LogicalOperator.OR) { + for (int i = 1; i < specs.size(); i++) { + result = Specifications.where(result).or(specs.get(i)); + } + } return result; } diff --git a/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecification.java b/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecification.java index 553d343edb..8055e959a6 100644 --- a/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecification.java +++ b/spring-rest-query-language/src/main/java/org/baeldung/persistence/dao/rsql/GenericRsqlSpecification.java @@ -77,17 +77,13 @@ public class GenericRsqlSpecification implements Specification { final Class type = root.get(property).getJavaType(); final List args = arguments.stream().map(arg -> { - - Object obj; if (type.equals(Integer.class)) { - obj = Integer.parseInt(arg); + return Integer.parseInt(arg); } else if (type.equals(Long.class)) { - obj = Long.parseLong(arg); + return Long.parseLong(arg); } else { - obj = arg; - } - return obj; - + return arg; + } }).collect(Collectors.toList()); return args;