diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2021-03-16 16:58:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-16 16:58:52 +0100 |
commit | 7f7d19758706127a3fea0d0f926886b224adfd12 (patch) | |
tree | 7696bee946be669a3952376bdd25a31009c609f9 /vespajlib | |
parent | 0dec30570440a8b5010ab5c24eb1ee4f6b0bf0a3 (diff) | |
parent | 2d1caee8feba2b6647dcab9ddb0e259d1ce7ff59 (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.java | 11 |
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(); } |