|
2 | 2 |
|
3 | 3 | import static io.github.perplexhub.rsql.RSQLOperators.*; |
4 | 4 |
|
| 5 | +import cz.jirutka.rsql.parser.ast.LogicalNode; |
5 | 6 | import java.util.*; |
| 7 | +import java.util.function.BiFunction; |
6 | 8 | import java.util.function.Function; |
7 | 9 | import java.util.stream.Collectors; |
8 | 10 |
|
@@ -417,14 +419,24 @@ private Predicate equalPredicate(Expression expr, Class type, Object argument) { |
417 | 419 | @Override |
418 | 420 | public Predicate visit(AndNode node, From root) { |
419 | 421 | log.debug("visit(node:{},root:{})", node, root); |
420 | | - |
421 | | - return node.getChildren().stream().map(n -> n.accept(this, root)).collect(Collectors.reducing(builder::and)).get(); |
| 422 | + return visitChildren(node, root, builder::and); |
422 | 423 | } |
423 | 424 |
|
424 | 425 | @Override |
425 | 426 | public Predicate visit(OrNode node, From root) { |
426 | 427 | log.debug("visit(node:{},root:{})", node, root); |
| 428 | + return visitChildren(node, root, builder::or); |
| 429 | + } |
| 430 | + |
| 431 | + private Predicate visitChildren(LogicalNode node, From root, BiFunction<Predicate, Predicate, Predicate> reducer) { |
| 432 | + Predicate result = null; |
| 433 | + |
| 434 | + for (var child : node) { |
| 435 | + result = result != null |
| 436 | + ? reducer.apply(result, child.accept(this, root)) |
| 437 | + : child.accept(this, root); |
| 438 | + } |
427 | 439 |
|
428 | | - return node.getChildren().stream().map(n -> n.accept(this, root)).collect(Collectors.reducing(builder::or)).get(); |
| 440 | + return result; |
429 | 441 | } |
430 | 442 | } |
0 commit comments