1
2
3
4
5
6 package dev.metaschema.core.metapath.cst.items;
7
8 import java.util.List;
9
10 import dev.metaschema.core.metapath.IExpression;
11 import dev.metaschema.core.metapath.cst.IExpressionVisitor;
12 import dev.metaschema.core.metapath.item.IItem;
13 import dev.metaschema.core.metapath.item.ISequence;
14 import dev.metaschema.core.util.ObjectUtils;
15 import edu.umd.cs.findbugs.annotations.NonNull;
16
17
18
19
20
21
22 public class Intersect
23 extends AbstractFilterExpression {
24
25
26
27
28
29
30
31
32
33
34
35 public Intersect(
36 @NonNull String text,
37 @NonNull IExpression left,
38 @NonNull IExpression right) {
39 super(text, left, right);
40 }
41
42 @Override
43 protected ISequence<?> applyFilterTo(@NonNull List<? extends IItem> source, @NonNull List<? extends IItem> items) {
44 return ISequence.of(ObjectUtils.notNull(source.stream()
45 .distinct()
46 .filter(items::contains)));
47 }
48
49 @Override
50 public <RESULT, CONTEXT> RESULT accept(@NonNull IExpressionVisitor<RESULT, CONTEXT> visitor, CONTEXT context) {
51 return visitor.visitIntersect(this, context);
52 }
53 }