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