Merge "Fix getSelection error"
diff --git a/java/com/google/gerrit/server/account/AccountCacheImpl.java b/java/com/google/gerrit/server/account/AccountCacheImpl.java
index f68a1c7..93e04880 100644
--- a/java/com/google/gerrit/server/account/AccountCacheImpl.java
+++ b/java/com/google/gerrit/server/account/AccountCacheImpl.java
@@ -19,6 +19,7 @@
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.RefNames;
@@ -113,20 +114,21 @@
                 ? defaultPreferenceCache.get(ref.getObjectId())
                 : DefaultPreferencesCache.EMPTY;
 
-        ImmutableMap.Builder<Account.Id, AccountState> result = ImmutableMap.builder();
+        Set<CachedAccountDetails.Key> keys =
+            Sets.newLinkedHashSetWithExpectedSize(accountIds.size());
         for (Account.Id id : accountIds) {
           Ref userRef = allUsers.exactRef(RefNames.refsUsers(id));
           if (userRef == null) {
             continue;
           }
-
+          keys.add(CachedAccountDetails.Key.create(id, userRef.getObjectId()));
+        }
+        ImmutableMap.Builder<Account.Id, AccountState> result = ImmutableMap.builder();
+        for (Map.Entry<CachedAccountDetails.Key, CachedAccountDetails> account :
+            accountDetailsCache.getAll(keys).entrySet()) {
           result.put(
-              id,
-              AccountState.forCachedAccount(
-                  accountDetailsCache.get(
-                      CachedAccountDetails.Key.create(id, userRef.getObjectId())),
-                  defaultPreferences,
-                  externalIds));
+              account.getKey().accountId(),
+              AccountState.forCachedAccount(account.getValue(), defaultPreferences, externalIds));
         }
         return result.build();
       }