summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2021-03-16 16:58:52 +0100
committerGitHub <noreply@github.com>2021-03-16 16:58:52 +0100
commit7f7d19758706127a3fea0d0f926886b224adfd12 (patch)
tree7696bee946be669a3952376bdd25a31009c609f9 /vespajlib
parent0dec30570440a8b5010ab5c24eb1ee4f6b0bf0a3 (diff)
parent2d1caee8feba2b6647dcab9ddb0e259d1ce7ff59 (diff)
Merge pull request #16980 from vespa-engine/mpolden/grouping-by
Add groupingBy to AbstractFilteringList
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java11
1 files changed, 11 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java b/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java
index 4a24cdcc7bf..ec85cb6de56 100644
--- a/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java
+++ b/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java
@@ -5,15 +5,18 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.Random;
import java.util.Set;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toUnmodifiableList;
@@ -86,6 +89,14 @@ public abstract class AbstractFilteringList<Type, ListType extends AbstractFilte
return constructor.apply(items.stream().sorted(comparator).collect(toUnmodifiableList()), false);
}
+ /** Returns the items grouped by the given classifier. */
+ public final <OtherType> Map<OtherType, ListType> groupingBy(Function<Type, OtherType> classifier) {
+ return items.stream().collect(Collectors.groupingBy(classifier,
+ HashMap::new,
+ Collectors.collectingAndThen(toUnmodifiableList(),
+ (list) -> constructor.apply(list, false))));
+ }
+
public final boolean isEmpty() { return items.isEmpty(); }
public final int size() { return items.size(); }