summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/data/access/helpers/MatchFeatureFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/data/access/helpers/MatchFeatureFilter.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/data/access/helpers/MatchFeatureFilter.java40
1 files changed, 40 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/data/access/helpers/MatchFeatureFilter.java b/vespajlib/src/main/java/com/yahoo/data/access/helpers/MatchFeatureFilter.java
new file mode 100644
index 00000000000..96451f35504
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/data/access/helpers/MatchFeatureFilter.java
@@ -0,0 +1,40 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.data.access.helpers;
+
+import com.yahoo.collections.Hashlet;
+
+import java.util.Collection;
+import java.util.IdentityHashMap;
+import java.util.function.Function;
+
+/**
+ * Helper class to remove (filter) some names from a Hashlet
+ * @author arnej
+ */
+public class MatchFeatureFilter implements Function<Hashlet<String,Integer>, Hashlet<String,Integer>> {
+
+ private final IdentityHashMap<Hashlet<String,Integer>, Hashlet<String,Integer>> mappings = new IdentityHashMap<>();
+ private final Collection<String> removeList;
+
+ public MatchFeatureFilter(Collection<String> removeList) {
+ this.removeList = removeList;
+ }
+
+ Hashlet<String,Integer> filter(Hashlet<String,Integer> input) {
+ Hashlet<String,Integer> result = new Hashlet<>();
+ result.reserve(input.size());
+ for (int i = 0; i < input.size(); i++) {
+ String k = input.key(i);
+ if (! removeList.contains(k)) {
+ Integer v = input.value(i);
+ result.put(k, v);
+ }
+ }
+ return result;
+ }
+
+ public Hashlet<String,Integer> apply(Hashlet<String,Integer> input) {
+ return mappings.computeIfAbsent(input, k -> filter(k));
+ }
+
+}