From 101dc3ea704d58a4ee172e40a73f40e5fb3cabe8 Mon Sep 17 00:00:00 2001 From: Near Privman Date: Tue, 23 Aug 2022 03:57:49 -0700 Subject: [PATCH] `collect`: Presize the `ImmutableMap` builder when `uniqueIndex` is run on a `Collection` RELNOTES=`collect`: Presize the `ImmutableMap` builder when `uniqueIndex` is run on a `Collection` PiperOrigin-RevId: 469418201 --- .../guava/src/com/google/common/collect/Maps.java | 13 +++++++++++-- guava/src/com/google/common/collect/Maps.java | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/android/guava/src/com/google/common/collect/Maps.java b/android/guava/src/com/google/common/collect/Maps.java index 6235f195eda5..de581ea4437d 100644 --- a/android/guava/src/com/google/common/collect/Maps.java +++ b/android/guava/src/com/google/common/collect/Maps.java @@ -1282,7 +1282,12 @@ public static ImmutableMap toMap( @CanIgnoreReturnValue public static ImmutableMap uniqueIndex( Iterable values, Function keyFunction) { - // TODO(lowasser): consider presizing the builder if values is a Collection + if (values instanceof Collection) { + return uniqueIndex( + values.iterator(), + keyFunction, + ImmutableMap.builderWithExpectedSize(((Collection) values).size())); + } return uniqueIndex(values.iterator(), keyFunction); } @@ -1318,8 +1323,12 @@ public static ImmutableMap uniqueIndex( @CanIgnoreReturnValue public static ImmutableMap uniqueIndex( Iterator values, Function keyFunction) { + return uniqueIndex(values, keyFunction, ImmutableMap.builder()); + } + + private static ImmutableMap uniqueIndex( + Iterator values, Function keyFunction, ImmutableMap.Builder builder) { checkNotNull(keyFunction); - ImmutableMap.Builder builder = ImmutableMap.builder(); while (values.hasNext()) { V value = values.next(); builder.put(keyFunction.apply(value), value); diff --git a/guava/src/com/google/common/collect/Maps.java b/guava/src/com/google/common/collect/Maps.java index 0754dbe332c5..c1517bc9727d 100644 --- a/guava/src/com/google/common/collect/Maps.java +++ b/guava/src/com/google/common/collect/Maps.java @@ -1358,7 +1358,12 @@ public static ImmutableMap toMap( @CanIgnoreReturnValue public static ImmutableMap uniqueIndex( Iterable values, Function keyFunction) { - // TODO(lowasser): consider presizing the builder if values is a Collection + if (values instanceof Collection) { + return uniqueIndex( + values.iterator(), + keyFunction, + ImmutableMap.builderWithExpectedSize(((Collection) values).size())); + } return uniqueIndex(values.iterator(), keyFunction); } @@ -1394,8 +1399,12 @@ public static ImmutableMap uniqueIndex( @CanIgnoreReturnValue public static ImmutableMap uniqueIndex( Iterator values, Function keyFunction) { + return uniqueIndex(values, keyFunction, ImmutableMap.builder()); + } + + private static ImmutableMap uniqueIndex( + Iterator values, Function keyFunction, ImmutableMap.Builder builder) { checkNotNull(keyFunction); - ImmutableMap.Builder builder = ImmutableMap.builder(); while (values.hasNext()) { V value = values.next(); builder.put(keyFunction.apply(value), value);