You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2019/10/14 17:57:32 UTC

[lucene-solr] 03/05: LUCENE-8979: Code Cleanup: Use entryset for map iteration wherever possible. - part 2

This is an automated email from the ASF dual-hosted git repository.

jpountz pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 93f9a093cc72251a09ac7c27468241a1deb68d6e
Author: Koen De Groote <kd...@gmail.com>
AuthorDate: Mon Oct 14 18:36:19 2019 +0200

    LUCENE-8979: Code Cleanup: Use entryset for map iteration wherever possible. - part 2
---
 lucene/CHANGES.txt                                  |  6 +++---
 .../analysis/query/QueryAutoStopWordAnalyzer.java   |  8 +++++---
 .../lucene/benchmark/byTask/utils/Config.java       | 19 +++++++++++--------
 .../java/org/apache/lucene/search/BooleanQuery.java | 11 +++++++----
 .../monitor/MultipassTermFilteredPresearcher.java   |  4 ++--
 .../lucene/monitor/TermFilteredPresearcher.java     |  4 ++--
 .../builders/MultiPhraseQueryNodeBuilder.java       | 10 ++++------
 .../lucene/spatial3d/geom/StandardObjects.java      |  4 ++--
 .../search/suggest/document/ContextQuery.java       |  6 +++---
 .../dependencies/GetMavenDependenciesTask.java      | 21 ++++++++++++---------
 .../solr/analytics/AnalyticsRequestManager.java     |  6 +++---
 .../solr/prometheus/collector/MetricSamples.java    |  7 ++++---
 .../solr/response/VelocityResponseWriter.java       |  5 +++--
 .../solr/client/solrj/embedded/JettySolrRunner.java | 10 ++++------
 .../apache/solr/cloud/OverseerTaskProcessor.java    |  6 +++---
 .../java/org/apache/solr/cloud/ZkShardTerms.java    |  5 +++--
 .../cloud/api/collections/DeleteReplicaCmd.java     |  5 +++--
 .../apache/solr/handler/admin/CoreAdminHandler.java |  6 +++---
 .../solr/handler/component/TermsComponent.java      | 16 +++++++++-------
 .../apache/solr/handler/loader/CSVLoaderBase.java   |  6 +++---
 .../solr/response/PHPSerializedResponseWriter.java  | 11 +++++++----
 .../src/java/org/apache/solr/rest/RestManager.java  |  5 +++--
 .../analysis/ManagedSynonymFilterFactory.java       | 17 +++++++++--------
 .../solr/schema/FileExchangeRateProvider.java       |  6 +++---
 .../TopGroupsShardRequestFactory.java               |  3 +--
 .../SearchGroupShardResponseProcessor.java          | 10 ++++++----
 .../TopGroupsShardResponseProcessor.java            | 18 +++++++++---------
 .../AddSchemaFieldsUpdateProcessorFactory.java      | 14 ++++++++------
 .../processor/CloneFieldUpdateProcessorFactory.java |  4 ++--
 .../java/org/apache/solr/util/SimplePostTool.java   |  6 +++---
 .../java/org/apache/solr/util/SolrPluginUtils.java  |  8 ++++----
 .../solr/client/solrj/impl/BaseCloudSolrClient.java |  4 ++--
 .../client/solrj/io/stream/CloudSolrStream.java     |  6 +++---
 .../client/solrj/io/stream/DeepRandomStream.java    |  6 +++---
 .../solrj/io/stream/FeaturesSelectionStream.java    |  4 ++--
 .../solrj/io/stream/SignificantTermsStream.java     | 10 +++++-----
 .../solr/client/solrj/io/stream/StatsStream.java    |  6 +++---
 .../client/solrj/io/stream/TextLogitStream.java     |  4 ++--
 .../solr/client/solrj/io/stream/ZplotStream.java    |  6 +++---
 39 files changed, 167 insertions(+), 146 deletions(-)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 4315a7d..251432a 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -29,8 +29,8 @@ Bug Fixes
 * LUCENE-9001: Fix race condition in SetOnce. (Przemko Robakowski)
 
 Other
----------------------
-(No changes)
+
+* LUCENE-8979: Code Cleanup: Use entryset for map iteration wherever possible. - Part 2 (Koen De Groote)
 
 * LUCENE-8746: Refactor EdgeTree - Introduce a Component tree that represents the tree of components (e.g polygons).
   Edge tree is now just a tree of edges. (Ignacio Vera)
@@ -161,7 +161,7 @@ Other
 
 * LUCENE-8758: QuadPrefixTree: removed levelS and levelN fields which weren't used. (Amish Shah)
 
-* LUCENE-8975: Code Cleanup: Use entryset for map iteration wherever possible.
+* LUCENE-8975: Code Cleanup: Use entryset for map iteration wherever possible. (Koen De Groote)
 
 * LUCENE-8993, LUCENE-8807: Changed all repository and download references in build files
   to HTTPS. (Uwe Schindler)
diff --git a/lucene/analysis/common/src/java/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzer.java b/lucene/analysis/common/src/java/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzer.java
index e863206..01a199d 100644
--- a/lucene/analysis/common/src/java/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzer.java
+++ b/lucene/analysis/common/src/java/org/apache/lucene/analysis/query/QueryAutoStopWordAnalyzer.java
@@ -200,10 +200,12 @@ public final class QueryAutoStopWordAnalyzer extends AnalyzerWrapper {
    */
   public Term[] getStopWords() {
     List<Term> allStopWords = new ArrayList<>();
-    for (String fieldName : stopWordsPerField.keySet()) {
-      Set<String> stopWords = stopWordsPerField.get(fieldName);
+    for (Map.Entry<String, Set<String>> entry : stopWordsPerField.entrySet()) {
+      String field = entry.getKey();
+      Set<String> stopWords = entry.getValue();
+
       for (String text : stopWords) {
-        allStopWords.add(new Term(fieldName, text));
+        allStopWords.add(new Term(field, text));
       }
     }
     return allStopWords.toArray(new Term[allStopWords.size()]);
diff --git a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java
index 07bb846..1c7a98d 100644
--- a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java
+++ b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/utils/Config.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.StringTokenizer;
 
@@ -276,8 +277,9 @@ public class Config {
     // log changes in values
     if (valByRound.size() > 0) {
       sb.append(": ");
-      for (final String name : valByRound.keySet()) {
-        Object a = valByRound.get(name);
+      for (final Map.Entry<String, Object> entry : valByRound.entrySet()) {
+        final String name = entry.getKey();
+        Object a = entry.getValue();
         if (a instanceof int[]) {
           int ai[] = (int[]) a;
           int n1 = (roundNumber - 1) % ai.length;
@@ -388,9 +390,8 @@ public class Config {
       return "";
     }
     StringBuilder sb = new StringBuilder();
-    for (final String name : colForValByRound.keySet()) {
-      String colName = colForValByRound.get(name);
-      sb.append(" ").append(colName);
+    for (final String colName : colForValByRound.values()) {
+      sb.append(' ').append(colName);
     }
     return sb.toString();
   }
@@ -403,15 +404,17 @@ public class Config {
       return "";
     }
     StringBuilder sb = new StringBuilder();
-    for (final String name : colForValByRound.keySet()) {
-      String colName = colForValByRound.get(name);
+    for (final Map.Entry<String, String> entry : colForValByRound.entrySet()) {
+      String colName = entry.getValue();
       String template = " " + colName;
       if (roundNum < 0) {
         // just append blanks
         sb.append(Format.formatPaddLeft("-", template));
       } else {
+        String valByRoundName = entry.getKey();
+
         // append actual values, for that round
-        Object a = valByRound.get(name);
+        Object a = valByRound.get(valByRoundName);
         if (a instanceof int[]) {
           int ai[] = (int[]) a;
           int n = roundNum % ai.length;
diff --git a/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java b/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
index 0484fe7..d72f138 100644
--- a/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
@@ -510,10 +510,13 @@ public class BooleanQuery extends Query implements Iterable<BooleanClause> {
 
   @Override
   public void visit(QueryVisitor visitor) {
-    for (BooleanClause.Occur occur : clauseSets.keySet()) {
-      if (clauseSets.get(occur).size() > 0) {
-        QueryVisitor v = visitor.getSubVisitor(occur, this);
-        for (Query q : clauseSets.get(occur)) {
+    for (Map.Entry<Occur, Collection<Query>> entry : clauseSets.entrySet()) {
+      Occur clauseOccur = entry.getKey();
+      Collection<Query> clauseQueries = entry.getValue();
+
+      if (clauseQueries.size() > 0) {
+        QueryVisitor v = visitor.getSubVisitor(clauseOccur, this);
+        for (Query q : clauseQueries) {
           q.visit(v);
         }
       }
diff --git a/lucene/monitor/src/java/org/apache/lucene/monitor/MultipassTermFilteredPresearcher.java b/lucene/monitor/src/java/org/apache/lucene/monitor/MultipassTermFilteredPresearcher.java
index b155e13..8f25da9 100644
--- a/lucene/monitor/src/java/org/apache/lucene/monitor/MultipassTermFilteredPresearcher.java
+++ b/lucene/monitor/src/java/org/apache/lucene/monitor/MultipassTermFilteredPresearcher.java
@@ -113,8 +113,8 @@ public class MultipassTermFilteredPresearcher extends TermFilteredPresearcher {
     @Override
     public Query build() {
       Map<String, BytesRef[]> collectedTerms = new HashMap<>();
-      for (String field : terms.keySet()) {
-        collectedTerms.put(field, convertHash(terms.get(field)));
+      for (Map.Entry<String, BytesRefHash> entry : terms.entrySet()) {
+        collectedTerms.put(entry.getKey(), convertHash(entry.getValue()));
       }
       BooleanQuery.Builder parent = new BooleanQuery.Builder();
       for (int i = 0; i < passes; i++) {
diff --git a/lucene/monitor/src/java/org/apache/lucene/monitor/TermFilteredPresearcher.java b/lucene/monitor/src/java/org/apache/lucene/monitor/TermFilteredPresearcher.java
index a526f7e..a1f8ce1 100644
--- a/lucene/monitor/src/java/org/apache/lucene/monitor/TermFilteredPresearcher.java
+++ b/lucene/monitor/src/java/org/apache/lucene/monitor/TermFilteredPresearcher.java
@@ -225,8 +225,8 @@ public class TermFilteredPresearcher extends Presearcher {
       @Override
       public Query build() {
         BooleanQuery.Builder builder = new BooleanQuery.Builder();
-        for (String field : terms.keySet()) {
-          builder.add(new TermInSetQuery(field, terms.get(field)), BooleanClause.Occur.SHOULD);
+        for (Map.Entry<String, List<BytesRef>> entry : terms.entrySet()) {
+          builder.add(new TermInSetQuery(entry.getKey(), entry.getValue()), BooleanClause.Occur.SHOULD);
         }
         return builder.build();
       }
diff --git a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/builders/MultiPhraseQueryNodeBuilder.java b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/builders/MultiPhraseQueryNodeBuilder.java
index 35debe9..6de6659 100644
--- a/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/builders/MultiPhraseQueryNodeBuilder.java
+++ b/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/standard/builders/MultiPhraseQueryNodeBuilder.java
@@ -18,6 +18,7 @@ package org.apache.lucene.queryparser.flexible.standard.builders;
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.TreeMap;
 
 import org.apache.lucene.index.Term;
@@ -67,12 +68,9 @@ public class MultiPhraseQueryNodeBuilder implements StandardQueryBuilder {
 
       }
 
-      for (int positionIncrement : positionTermMap.keySet()) {
-        List<Term> termList = positionTermMap.get(positionIncrement);
-
-        phraseQueryBuilder.add(termList.toArray(new Term[termList.size()]),
-            positionIncrement);
-
+      for (Map.Entry<Integer, List<Term>> entry : positionTermMap.entrySet()) {
+        List<Term> termList = entry.getValue();
+        phraseQueryBuilder.add(termList.toArray(new Term[termList.size()]), entry.getKey());
       }
 
     }
diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java
index 4e0acae..3283dbc 100644
--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java
+++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java
@@ -77,8 +77,8 @@ class StandardObjects {
    classRegsitry.put(GeoExactCircle.class, 37);
    classRegsitry.put(GeoS2Shape.class, 38);
 
-   for (Class<?> clazz : classRegsitry.keySet()){
-     codeRegsitry.put(classRegsitry.get(clazz), clazz);
+   for (Map.Entry<Class<?>, Integer> entry : classRegsitry.entrySet()){
+     codeRegsitry.put(entry.getValue(), entry.getKey());
    }
   }
 }
diff --git a/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/ContextQuery.java b/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/ContextQuery.java
index f5062d2..54f1508 100644
--- a/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/ContextQuery.java
+++ b/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/ContextQuery.java
@@ -156,15 +156,15 @@ public class ContextQuery extends CompletionQuery implements Accountable {
   public String toString(String field) {
     StringBuilder buffer = new StringBuilder();
     BytesRefBuilder scratch = new BytesRefBuilder();
-    for (IntsRef context : contexts.keySet()) {
+    for (Map.Entry<IntsRef, ContextMetaData> entry : contexts.entrySet()) {
       if (buffer.length() != 0) {
         buffer.append(",");
       } else {
         buffer.append("contexts");
         buffer.append(":[");
       }
-      buffer.append(Util.toBytesRef(context, scratch).utf8ToString());
-      ContextMetaData metaData = contexts.get(context);
+      buffer.append(Util.toBytesRef(entry.getKey(), scratch).utf8ToString());
+      ContextMetaData metaData = entry.getValue();
       if (metaData.exact == false) {
         buffer.append("*");
       }
diff --git a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java b/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java
index 610323f..df3668d 100644
--- a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java
+++ b/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java
@@ -312,10 +312,10 @@ public class GetMavenDependenciesTask extends Task {
     // Delay adding shared compile-scope dependencies until after all have been processed,
     // so dependency sharing is limited to a depth of one.
     Map<String,SortedSet<ExternalDependency>> sharedDependencies = new HashMap<>();
-    for (String module : interModuleExternalCompileScopeDependencies.keySet()) {
+    for (Map.Entry<String, Set<String>> entry : interModuleExternalCompileScopeDependencies.entrySet()) {
       TreeSet<ExternalDependency> deps = new TreeSet<>();
-      sharedDependencies.put(module, deps);
-      Set<String> moduleDependencies = interModuleExternalCompileScopeDependencies.get(module);
+      sharedDependencies.put(entry.getKey(), deps);
+      Set<String> moduleDependencies = entry.getValue();
       if (null != moduleDependencies) {
         for (String otherArtifactId : moduleDependencies) {
           SortedSet<ExternalDependency> otherExtDeps = allExternalDependencies.get(otherArtifactId); 
@@ -329,13 +329,14 @@ public class GetMavenDependenciesTask extends Task {
         }
       }
     }
-    for (String module : interModuleExternalTestScopeDependencies.keySet()) {
+    for (Map.Entry<String, Set<String>> entry : interModuleExternalTestScopeDependencies.entrySet()) {
+      String module = entry.getKey();
       SortedSet<ExternalDependency> deps = sharedDependencies.get(module);
       if (null == deps) {
         deps = new TreeSet<>();
         sharedDependencies.put(module, deps);
       }
-      Set<String> moduleDependencies = interModuleExternalTestScopeDependencies.get(module);
+      Set<String> moduleDependencies = entry.getValue();
       if (null != moduleDependencies) {
         for (String otherArtifactId : moduleDependencies) {
           int testScopePos = otherArtifactId.indexOf(":test");
@@ -362,13 +363,14 @@ public class GetMavenDependenciesTask extends Task {
         }
       }
     }
-    for (String module : sharedDependencies.keySet()) {
+    for (Map.Entry<String, SortedSet<ExternalDependency>> entry : sharedDependencies.entrySet()) {
+      String module = entry.getKey();
       SortedSet<ExternalDependency> deps = allExternalDependencies.get(module);
       if (null == deps) {
         deps = new TreeSet<>();
         allExternalDependencies.put(module, deps);
       }
-      for (ExternalDependency dep : sharedDependencies.get(module)) {
+      for (ExternalDependency dep : entry.getValue()) {
         String dependencyCoordinate = dep.groupId + ":" + dep.artifactId;
         if (globalOptionalExternalDependencies.contains(dependencyCoordinate)
             || (perModuleOptionalExternalDependencies.containsKey(module)
@@ -439,9 +441,10 @@ public class GetMavenDependenciesTask extends Task {
    * dependencies.
    */
   private void appendAllInternalDependencies(StringBuilder builder) {
-    for (String artifactId : internalCompileScopeDependencies.keySet()) {
+    for (Map.Entry<String, SortedSet<String>> entry : internalCompileScopeDependencies.entrySet()) {
+      String artifactId = entry.getKey();
       List<String> exclusions = new ArrayList<>();
-      exclusions.addAll(internalCompileScopeDependencies.get(artifactId));
+      exclusions.addAll(entry.getValue());
       SortedSet<ExternalDependency> extDeps = allExternalDependencies.get(artifactId);
       if (null != extDeps) {
         for (ExternalDependency externalDependency : extDeps) {
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/AnalyticsRequestManager.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/AnalyticsRequestManager.java
index f1bfba8..f58bb6e 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/AnalyticsRequestManager.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/AnalyticsRequestManager.java
@@ -179,9 +179,9 @@ public class AnalyticsRequestManager {
     ungroupedReductionManager.exportData();
 
     output.writeInt(groupingManagers.size());
-    for (String groupingName : groupingManagers.keySet()) {
-      output.writeUTF(groupingName);
-      groupingManagers.get(groupingName).exportShardData(output);
+    for (Map.Entry<String, AnalyticsGroupingManager> entry : groupingManagers.entrySet()) {
+      output.writeUTF(entry.getKey());
+      entry.getValue().exportShardData(output);
     }
   }
 
diff --git a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/collector/MetricSamples.java b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/collector/MetricSamples.java
index dce4c63..d71616c 100644
--- a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/collector/MetricSamples.java
+++ b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/collector/MetricSamples.java
@@ -53,13 +53,14 @@ public class MetricSamples {
   }
 
   public void addAll(MetricSamples other) {
-    for (String key : other.samplesByMetricName.keySet()) {
+    for (Map.Entry<String, Collector.MetricFamilySamples> entry : other.samplesByMetricName.entrySet()) {
+      String key = entry.getKey();
       if (this.samplesByMetricName.containsKey(key)) {
-        for (Collector.MetricFamilySamples.Sample sample : other.samplesByMetricName.get(key).samples) {
+        for (Collector.MetricFamilySamples.Sample sample : entry.getValue().samples) {
           addSampleIfMetricExists(key, sample);
         }
       } else {
-        this.samplesByMetricName.put(key, other.samplesByMetricName.get(key));
+        this.samplesByMetricName.put(key, entry.getValue());
       }
     }
   }
diff --git a/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java b/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
index 828d29b..6279ee3 100644
--- a/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
+++ b/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
@@ -235,8 +235,9 @@ public class VelocityResponseWriter implements QueryResponseWriter, SolrCoreAwar
         </queryResponseWriter>
 */
     // Custom tools can override any of the built-in tools provided above, by registering one with the same name
-    for(String name : customTools.keySet()) {
-      Object customTool = SolrCore.createInstance(customTools.get(name), Object.class, "VrW custom tool: " + name, request.getCore(), request.getCore().getResourceLoader());
+    for(Map.Entry<String, String> entry : customTools.entrySet()) {
+      String name = entry.getKey();
+      Object customTool = SolrCore.createInstance(entry.getValue(), Object.class, "VrW custom tool: " + name, request.getCore(), request.getCore().getResourceLoader());
       if (customTool instanceof LocaleConfig) {
         ((LocaleConfig)customTool).configure(toolConfig);
       }
diff --git a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
index dd8de23..c1e8bc2 100644
--- a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
+++ b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
@@ -371,14 +371,12 @@ public class JettySolrRunner {
 
         debugFilter = root.addFilter(DebugFilter.class, "*", EnumSet.of(DispatcherType.REQUEST) );
         extraFilters = new LinkedList<>();
-        for (Class<? extends Filter> filterClass : config.extraFilters.keySet()) {
-          extraFilters.add(root.addFilter(filterClass, config.extraFilters.get(filterClass),
-              EnumSet.of(DispatcherType.REQUEST)));
+        for (Map.Entry<Class<? extends Filter>, String> entry : config.extraFilters.entrySet()) {
+          extraFilters.add(root.addFilter(entry.getKey(), entry.getValue(), EnumSet.of(DispatcherType.REQUEST)));
         }
 
-        for (ServletHolder servletHolder : config.extraServlets.keySet()) {
-          String pathSpec = config.extraServlets.get(servletHolder);
-          root.addServlet(servletHolder, pathSpec);
+        for (Map.Entry<ServletHolder, String> entry : config.extraServlets.entrySet()) {
+          root.addServlet(entry.getKey(), entry.getValue());
         }
         dispatchFilter = root.getServletHandler().newFilterHolder(Source.EMBEDDED);
         dispatchFilter.setHeldClass(SolrDispatchFilter.class);
diff --git a/solr/core/src/java/org/apache/solr/cloud/OverseerTaskProcessor.java b/solr/core/src/java/org/apache/solr/cloud/OverseerTaskProcessor.java
index f45d37f..4afe7c4 100644
--- a/solr/core/src/java/org/apache/solr/cloud/OverseerTaskProcessor.java
+++ b/solr/core/src/java/org/apache/solr/cloud/OverseerTaskProcessor.java
@@ -352,10 +352,10 @@ public class OverseerTaskProcessor implements Runnable, Closeable {
 
   private void cleanUpWorkQueue() throws KeeperException, InterruptedException {
     synchronized (completedTasks) {
-      for (String id : completedTasks.keySet()) {
-        workQueue.remove(completedTasks.get(id));
+      for (Map.Entry<String, QueueEvent> entry : completedTasks.entrySet()) {
+        workQueue.remove(entry.getValue());
         synchronized (runningZKTasks) {
-          runningZKTasks.remove(id);
+          runningZKTasks.remove(entry.getKey());
         }
       }
       completedTasks.clear();
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
index 01fe62b..206ccd2 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
@@ -482,9 +482,10 @@ public class ZkShardTerms implements AutoCloseable{
 
       HashMap<String, Long> newValues = new HashMap<>(values);
       long leaderTerm = newValues.get(leader);
-      for (String key : newValues.keySet()) {
+      for (Map.Entry<String, Long> entry : newValues.entrySet()) {
+        String key = entry.getKey();
         if (replicasNeedingRecovery.contains(key)) foundReplicasInLowerTerms = true;
-        if (Objects.equals(newValues.get(key), leaderTerm)) {
+        if (Objects.equals(entry.getValue(), leaderTerm)) {
           if(skipIncreaseTermOf(key, replicasNeedingRecovery)) {
             changed = true;
           } else {
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteReplicaCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteReplicaCmd.java
index a6b45b5..83f9141 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteReplicaCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteReplicaCmd.java
@@ -145,9 +145,10 @@ public class DeleteReplicaCmd implements Cmd {
       }
     }
 
-    for (Slice shardSlice: shardToReplicasMapping.keySet()) {
+    for (Map.Entry<Slice, Set<String>> entry : shardToReplicasMapping.entrySet()) {
+      Slice shardSlice = entry.getKey();
       String shardId = shardSlice.getName();
-      Set<String> replicas = shardToReplicasMapping.get(shardSlice);
+      Set<String> replicas = entry.getValue();
       //callDeleteReplica on all replicas
       for (String replica: replicas) {
         log.debug("Deleting replica {}  for shard {} based on count {}", replica, shardId, count);
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
index 45cb063..cd6cd38 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
@@ -242,10 +242,10 @@ public class CoreAdminHandler extends RequestHandlerBase implements PermissionNa
     Map<String, String> coreParams = new HashMap<>();
 
     // standard core create parameters
-    for (String param : paramToProp.keySet()) {
-      String value = params.get(param, null);
+    for (Map.Entry<String, String> entry : paramToProp.entrySet()) {
+      String value = params.get(entry.getKey(), null);
       if (StringUtils.isNotEmpty(value)) {
-        coreParams.put(paramToProp.get(param), value);
+        coreParams.put(entry.getValue(), value);
       }
     }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
index f5b03cf..7aeec0f 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.regex.Pattern;
 
 import org.apache.lucene.index.IndexReaderContext;
@@ -505,15 +506,16 @@ public class TermsComponent extends SearchComponent {
       TermsResponse termsResponse = new TermsResponse(terms);
 
       // loop though each field and add each term+freq to map
-      for (String key : fieldmap.keySet()) {
-        HashMap<String, TermsResponse.Term> termmap = fieldmap.get(key);
-        List<TermsResponse.Term> termlist = termsResponse.getTerms(key);
+      for (Map.Entry<String, HashMap<String, TermsResponse.Term>> entry : fieldmap.entrySet()) {
+        List<TermsResponse.Term> termlist = termsResponse.getTerms(entry.getKey());
 
         // skip this field if there are no terms
         if (termlist == null) {
           continue;
         }
 
+        HashMap<String, TermsResponse.Term> termmap = entry.getValue();
+
         // loop though each term
         for (TermsResponse.Term tc : termlist) {
           String term = tc.getTerm();
@@ -553,13 +555,13 @@ public class TermsComponent extends SearchComponent {
       }
 
       // loop through each field we want terms from
-      for (String key : fieldmap.keySet()) {
+      for (Map.Entry<String, HashMap<String, TermsResponse.Term>> entry : fieldmap.entrySet()) {
         NamedList<Object> fieldterms = new SimpleOrderedMap<>();
         TermsResponse.Term[] data = null;
         if (sort) {
-          data = getCountSorted(fieldmap.get(key));
+          data = getCountSorted(entry.getValue());
         } else {
-          data = getLexSorted(fieldmap.get(key));
+          data = getLexSorted(entry.getValue());
         }
 
         boolean includeTotalTermFreq = params.getBool(TermsParams.TERMS_TTF, false);
@@ -576,7 +578,7 @@ public class TermsComponent extends SearchComponent {
           }
         }
 
-        response.add(key, fieldterms);
+        response.add(entry.getKey(), fieldterms);
       }
 
       return response;
diff --git a/solr/core/src/java/org/apache/solr/handler/loader/CSVLoaderBase.java b/solr/core/src/java/org/apache/solr/handler/loader/CSVLoaderBase.java
index b503fa3..f5bc2c8 100644
--- a/solr/core/src/java/org/apache/solr/handler/loader/CSVLoaderBase.java
+++ b/solr/core/src/java/org/apache/solr/handler/loader/CSVLoaderBase.java
@@ -30,6 +30,7 @@ import org.apache.solr.internal.csv.CSVStrategy;
 import org.apache.solr.internal.csv.CSVParser;
 import org.apache.commons.io.IOUtils;
 
+import java.util.Map;
 import java.util.regex.Pattern;
 import java.util.List;
 import java.util.HashMap;
@@ -380,9 +381,8 @@ abstract class CSVLoaderBase extends ContentStreamLoader {
     }
 
     // add any literals
-    for (String fname : literals.keySet()) {
-      String val = literals.get(fname);
-      doc.addField(fname, val);
+    for (Map.Entry<String, String> entry : literals.entrySet()) {
+      doc.addField(entry.getKey(), entry.getValue());
     }
     if (rowId != null){
       doc.addField(rowId, line + rowIdOffset);
diff --git a/solr/core/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java b/solr/core/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java
index 05208be..7e090b8 100644
--- a/solr/core/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java
+++ b/solr/core/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
+import java.util.Map;
 
 import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.BytesRef;
@@ -137,16 +138,18 @@ class PHPSerializedWriter extends JSONWriter {
     }
 
     writeMapOpener(single.size() + multi.size());
-    for(String fname: single.keySet()){
-      Object val = single.get(fname);
+    for(Map.Entry<String, Object> entry : single.entrySet()){
+      String fname = entry.getKey();
+      Object val = entry.getValue();
       writeKey(fname, true);
       writeVal(fname, val);
     }
     
-    for(String fname: multi.keySet()){
+    for(Map.Entry<String, Object> entry : multi.entrySet()){
+      String fname = entry.getKey();
       writeKey(fname, true);
 
-      Object val = multi.get(fname);
+      Object val = entry.getValue();
       if (!(val instanceof Collection)) {
         // should never be reached if multivalued fields are stored as a Collection
         // so I'm assuming a size of 1 just to wrap the single value
diff --git a/solr/core/src/java/org/apache/solr/rest/RestManager.java b/solr/core/src/java/org/apache/solr/rest/RestManager.java
index abefc68..13717fb 100644
--- a/solr/core/src/java/org/apache/solr/rest/RestManager.java
+++ b/solr/core/src/java/org/apache/solr/rest/RestManager.java
@@ -768,11 +768,12 @@ public class RestManager {
     }      
     
     int numAttached = 0;
-    for (String resourceId : managed.keySet()) {
+    for (Map.Entry<String, ManagedResource> entry : managed.entrySet()) {
+      String resourceId = entry.getKey();
       if (resourceId.startsWith(routerPath)) {
         // the way restlet works is you attach a path w/o the routerPath
         String path = resourceId.substring(routerPath.length());
-        attachManagedResource(managed.get(resourceId), path, router);
+        attachManagedResource(entry.getValue(), path, router);
         ++numAttached;
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java
index 8d77c53..87878ce 100644
--- a/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java
+++ b/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedSynonymFilterFactory.java
@@ -142,7 +142,8 @@ public class ManagedSynonymFilterFactory extends BaseManagedTokenFilterFactory {
       synonymMappings = new TreeMap<>();
       if (managedData != null) {
         Map<String,Object> storedSyns = (Map<String,Object>)managedData;
-        for (String key : storedSyns.keySet()) {
+        for (Map.Entry<String, Object> entry : storedSyns.entrySet()) {
+          String key = entry.getKey();
 
           String caseKey = applyCaseSetting(ignoreCase, key);
           CasePreservedSynonymMappings cpsm = synonymMappings.get(caseKey);
@@ -153,7 +154,7 @@ public class ManagedSynonymFilterFactory extends BaseManagedTokenFilterFactory {
           
           // give the nature of our JSON parsing solution, we really have
           // no guarantees on what is in the file
-          Object mapping = storedSyns.get(key);
+          Object mapping = entry.getValue();
           if (!(mapping instanceof List)) {
             throw new SolrException(ErrorCode.SERVER_ERROR, 
                 "Invalid synonym file format! Expected a list of synonyms for "+key+
@@ -161,7 +162,7 @@ public class ManagedSynonymFilterFactory extends BaseManagedTokenFilterFactory {
           }
                     
           Set<String> sortedVals = new TreeSet<>();
-          sortedVals.addAll((List<String>)storedSyns.get(key));          
+          sortedVals.addAll((List<String>) entry.getValue());
           cpsm.mappings.put(key, sortedVals);        
         }
       }
@@ -269,8 +270,8 @@ public class ManagedSynonymFilterFactory extends BaseManagedTokenFilterFactory {
     protected Map<String,Set<String>> getStoredView() {
       Map<String,Set<String>> storedView = new TreeMap<>();
       for (CasePreservedSynonymMappings cpsm : synonymMappings.values()) {
-        for (String key : cpsm.mappings.keySet()) {
-          storedView.put(key, cpsm.mappings.get(key));
+        for (Map.Entry<String, Set<String>> entry : cpsm.mappings.entrySet()) {
+          storedView.put(entry.getKey(), entry.getValue());
         }
       }
       return storedView;
@@ -366,10 +367,10 @@ public class ManagedSynonymFilterFactory extends BaseManagedTokenFilterFactory {
     public void parse(Reader in) throws IOException, ParseException {
       boolean ignoreCase = synonymManager.getIgnoreCase();
       for (CasePreservedSynonymMappings cpsm : synonymManager.synonymMappings.values()) {
-        for (String term : cpsm.mappings.keySet()) {
-          for (String mapping : cpsm.mappings.get(term)) {
+        for (Map.Entry<String, Set<String>> entry : cpsm.mappings.entrySet()) {
+          for (String mapping : entry.getValue()) {
             // apply the case setting to match the behavior of the SynonymMap builder
-            CharsRef casedTerm = analyze(synonymManager.applyCaseSetting(ignoreCase, term), new CharsRefBuilder());
+            CharsRef casedTerm = analyze(synonymManager.applyCaseSetting(ignoreCase, entry.getKey()), new CharsRefBuilder());
             CharsRef casedMapping = analyze(synonymManager.applyCaseSetting(ignoreCase, mapping), new CharsRefBuilder());
             add(casedTerm, casedMapping, false);
           }          
diff --git a/solr/core/src/java/org/apache/solr/schema/FileExchangeRateProvider.java b/solr/core/src/java/org/apache/solr/schema/FileExchangeRateProvider.java
index fe3f2fd..dabf688 100644
--- a/solr/core/src/java/org/apache/solr/schema/FileExchangeRateProvider.java
+++ b/solr/core/src/java/org/apache/solr/schema/FileExchangeRateProvider.java
@@ -148,9 +148,9 @@ public class FileExchangeRateProvider implements ExchangeRateProvider {
   @Override
   public Set<String> listAvailableCurrencies() {
     Set<String> currencies = new HashSet<>();
-    for(String from : rates.keySet()) {
-      currencies.add(from);
-      for(String to : rates.get(from).keySet()) {
+    for(Map.Entry<String, Map<String, Double>> entry : rates.entrySet()) {
+      currencies.add(entry.getKey());
+      for(String to : entry.getValue().keySet()) {
         currencies.add(to);
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/search/grouping/distributed/requestfactory/TopGroupsShardRequestFactory.java b/solr/core/src/java/org/apache/solr/search/grouping/distributed/requestfactory/TopGroupsShardRequestFactory.java
index 57776d9..13b81b7 100644
--- a/solr/core/src/java/org/apache/solr/search/grouping/distributed/requestfactory/TopGroupsShardRequestFactory.java
+++ b/solr/core/src/java/org/apache/solr/search/grouping/distributed/requestfactory/TopGroupsShardRequestFactory.java
@@ -65,8 +65,7 @@ public class TopGroupsShardRequestFactory implements ShardRequestFactory {
   private ShardRequest[] createRequestForSpecificShards(ResponseBuilder rb) {
     // Determine all unique shards to query for TopGroups
     Set<String> uniqueShards = new HashSet<>();
-    for (String command : rb.searchGroupToShards.keySet()) {
-      Map<SearchGroup<BytesRef>, Set<String>> groupsToShard = rb.searchGroupToShards.get(command);
+    for (Map<SearchGroup<BytesRef>, Set<String>> groupsToShard : rb.searchGroupToShards.values()) {
       for (Set<String> shards : groupsToShard.values()) {
         uniqueShards.addAll(shards);
       }
diff --git a/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/SearchGroupShardResponseProcessor.java b/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/SearchGroupShardResponseProcessor.java
index 71c34b8..016da1d 100644
--- a/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/SearchGroupShardResponseProcessor.java
+++ b/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/SearchGroupShardResponseProcessor.java
@@ -107,7 +107,8 @@ public class SearchGroupShardResponseProcessor implements ShardResponseProcessor
       @SuppressWarnings("unchecked")
       NamedList<NamedList> firstPhaseResult = (NamedList<NamedList>) srsp.getSolrResponse().getResponse().get("firstPhase");
       final Map<String, SearchGroupsFieldCommandResult> result = serializer.transformToNative(firstPhaseResult, groupSort, withinGroupSort, srsp.getShard());
-      for (String field : commandSearchGroups.keySet()) {
+      for (Map.Entry<String, List<Collection<SearchGroup<BytesRef>>>> entry : commandSearchGroups.entrySet()) {
+        String field = entry.getKey();
         final SearchGroupsFieldCommandResult firstPhaseCommandResult = result.get(field);
 
         final Integer groupCount = firstPhaseCommandResult.getGroupCount();
@@ -122,7 +123,7 @@ public class SearchGroupShardResponseProcessor implements ShardResponseProcessor
           continue;
         }
 
-        commandSearchGroups.get(field).add(searchGroups);
+        entry.getValue().add(searchGroups);
         for (SearchGroup<BytesRef> searchGroup : searchGroups) {
           Map<SearchGroup<BytesRef>, Set<String>> map = tempSearchGroupToShards.get(field);
           Set<String> shards = map.get(searchGroup);
@@ -137,8 +138,9 @@ public class SearchGroupShardResponseProcessor implements ShardResponseProcessor
     }
     rb.totalHitCount = hitCountDuringFirstPhase;
     rb.firstPhaseElapsedTime = maxElapsedTime;
-    for (String groupField : commandSearchGroups.keySet()) {
-      List<Collection<SearchGroup<BytesRef>>> topGroups = commandSearchGroups.get(groupField);
+    for (Map.Entry<String, List<Collection<SearchGroup<BytesRef>>>> entry : commandSearchGroups.entrySet()) {
+      String groupField = entry.getKey();
+      List<Collection<SearchGroup<BytesRef>>> topGroups = entry.getValue();
       Collection<SearchGroup<BytesRef>> mergedTopGroups = SearchGroup.merge(topGroups, groupSortSpec.getOffset(), groupSortSpec.getCount(), groupSort);
       if (mergedTopGroups == null) {
         continue;
diff --git a/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/TopGroupsShardResponseProcessor.java b/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/TopGroupsShardResponseProcessor.java
index 1525bcf..5a0cd62 100644
--- a/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/TopGroupsShardResponseProcessor.java
+++ b/solr/core/src/java/org/apache/solr/search/grouping/distributed/responseprocessor/TopGroupsShardResponseProcessor.java
@@ -125,8 +125,8 @@ public class TopGroupsShardResponseProcessor implements ShardResponseProcessor {
       Map<String, ?> result = serializer.transformToNative(secondPhaseResult, groupSort, withinGroupSort, srsp.getShard());
       int numFound = 0;
       float maxScore = Float.NaN;
-      for (String field : commandTopGroups.keySet()) {
-        TopGroups<BytesRef> topGroups = (TopGroups<BytesRef>) result.get(field);
+      for (Map.Entry<String, List<TopGroups<BytesRef>>> entry : commandTopGroups.entrySet()) {
+        TopGroups<BytesRef> topGroups = (TopGroups<BytesRef>) result.get(entry.getKey());
         if (topGroups == null) {
           continue;
         }
@@ -134,7 +134,7 @@ public class TopGroupsShardResponseProcessor implements ShardResponseProcessor {
           numFound += topGroups.totalHitCount;
           if (Float.isNaN(maxScore) || topGroups.maxScore > maxScore) maxScore = topGroups.maxScore;
         }
-        commandTopGroups.get(field).add(topGroups);
+        entry.getValue().add(topGroups);
       }
       for (String query : queries) {
         QueryCommandResult queryCommandResult = (QueryCommandResult) result.get(query);
@@ -150,8 +150,8 @@ public class TopGroupsShardResponseProcessor implements ShardResponseProcessor {
         individualShardInfo.add("maxScore", maxScore);
       }
     }
-    for (String groupField : commandTopGroups.keySet()) {
-      List<TopGroups<BytesRef>> topGroups = commandTopGroups.get(groupField);
+    for (Map.Entry<String, List<TopGroups<BytesRef>>> entry : commandTopGroups.entrySet()) {
+      List<TopGroups<BytesRef>> topGroups = entry.getValue();
       if (topGroups.isEmpty()) {
         continue;
       }
@@ -164,7 +164,7 @@ public class TopGroupsShardResponseProcessor implements ShardResponseProcessor {
           docsPerGroup += subTopGroups.totalGroupedHitCount;
         }
       }
-      rb.mergedTopGroups.put(groupField, TopGroups.merge(topGroups.toArray(topGroupsArr), groupSort, withinGroupSort, groupOffsetDefault, docsPerGroup, TopGroups.ScoreMergeMode.None));
+      rb.mergedTopGroups.put(entry.getKey(), TopGroups.merge(topGroups.toArray(topGroupsArr), groupSort, withinGroupSort, groupOffsetDefault, docsPerGroup, TopGroups.ScoreMergeMode.None));
     }
 
     // calculate topN and start for group.query
@@ -177,8 +177,8 @@ public class TopGroupsShardResponseProcessor implements ShardResponseProcessor {
       topN = limit >= 0? limit: Integer.MAX_VALUE;
     }
 
-    for (String query : commandTopDocs.keySet()) {
-      List<QueryCommandResult> queryCommandResults = commandTopDocs.get(query);
+    for (Map.Entry<String, List<QueryCommandResult>> entry : commandTopDocs.entrySet()) {
+      List<QueryCommandResult> queryCommandResults = entry.getValue();
       List<TopDocs> topDocs = new ArrayList<>(queryCommandResults.size());
       int mergedMatches = 0;
       float maxScore = Float.NaN;
@@ -202,7 +202,7 @@ public class TopGroupsShardResponseProcessor implements ShardResponseProcessor {
         mergedTopDocs = TopDocs.merge(
             withinGroupSort, start, topN, topDocs.toArray(new TopFieldDocs[topDocs.size()]), true);
       }
-      rb.mergedQueryCommandResults.put(query, new QueryCommandResult(mergedTopDocs, mergedMatches, maxScore));
+      rb.mergedQueryCommandResults.put(entry.getKey(), new QueryCommandResult(mergedTopDocs, mergedMatches, maxScore));
     }
     fillResultIds(rb);
   }
diff --git a/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java
index 131d72c..6d102d7 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java
@@ -424,11 +424,12 @@ public class AddSchemaFieldsUpdateProcessorFactory extends UpdateRequestProcesso
           builder.append("]");
           builder.append("\nCopyFields to be added to the schema: [");
           isFirst = true;
-          for (String fieldName : newCopyFields.keySet()) {
+          for (Map.Entry<String, Map<Integer, List<CopyFieldDef>>> entry : newCopyFields.entrySet()) {
+            String fieldName = entry.getKey();
             builder.append(isFirst ? "" : ",");
             isFirst = false;
             builder.append("source=").append(fieldName).append("{");
-            for (List<CopyFieldDef> copyFieldDefList : newCopyFields.get(fieldName).values()) {
+            for (List<CopyFieldDef> copyFieldDefList : entry.getValue().values()) {
               for (CopyFieldDef copyFieldDef : copyFieldDefList) {
                 builder.append("{dest=").append(copyFieldDef.getDest(fieldName));
                 builder.append(", maxChars=").append(copyFieldDef.getMaxChars()).append("}");
@@ -445,10 +446,11 @@ public class AddSchemaFieldsUpdateProcessorFactory extends UpdateRequestProcesso
           try {
             IndexSchema newSchema = oldSchema.addFields(newFields, Collections.emptyMap(), false);
             // Add copyFields
-            for (String srcField : newCopyFields.keySet()) {
-              for (Integer maxChars : newCopyFields.get(srcField).keySet()) {
-                newSchema = newSchema.addCopyFields(srcField, 
-                  newCopyFields.get(srcField).get(maxChars).stream().map(f -> f.getDest(srcField)).collect(Collectors.toList()), 
+            for (Map.Entry<String, Map<Integer, List<CopyFieldDef>>> entry : newCopyFields.entrySet()) {
+              String srcField = entry.getKey();
+              for (Integer maxChars : entry.getValue().keySet()) {
+                newSchema = newSchema.addCopyFields(srcField,
+                    entry.getValue().get(maxChars).stream().map(f -> f.getDest(srcField)).collect(Collectors.toList()),
                   maxChars);
               }
             }
diff --git a/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java
index ba20c9a..f0f3308 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactory.java
@@ -458,8 +458,8 @@ public class CloneFieldUpdateProcessorFactory
           destMap.put(resolvedDest, destField);
         }
 
-        for (String dest : destMap.keySet()) {
-          doc.put(dest, destMap.get(dest));
+        for (Map.Entry<String, SolrInputField> entry : destMap.entrySet()) {
+          doc.put(entry.getKey(), entry.getValue());
         }
         super.processAdd(cmd);
       }
diff --git a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
index 1b0cfcf..d48c413 100644
--- a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
+++ b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
@@ -709,9 +709,9 @@ public class SimplePostTool {
    * @return true if this is a supported content type
    */
   protected boolean typeSupported(String type) {
-    for(String key : mimeMap.keySet()) {
-      if(mimeMap.get(key).equals(type)) {
-        if(fileTypes.contains(key))
+    for(Map.Entry<String, String> entry : mimeMap.entrySet()) {
+      if(entry.getValue().equals(type)) {
+        if(fileTypes.contains(entry.getKey()))
           return true;
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
index 2807ad6..c8f7f73 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
@@ -900,12 +900,12 @@ public class SolrPluginUtils {
         Alias a = aliases.get(field);
 
         List<Query> disjuncts = new ArrayList<>();
-        for (String f : a.fields.keySet()) {
+        for (Map.Entry<String, Float> entry : a.fields.entrySet()) {
 
-          Query sub = getFieldQuery(f,queryText,quoted, false);
+          Query sub = getFieldQuery(entry.getKey(),queryText,quoted, false);
           if (null != sub) {
-            if (null != a.fields.get(f)) {
-              sub = new BoostQuery(sub, a.fields.get(f));
+            if (null != entry.getValue()) {
+              sub = new BoostQuery(sub, entry.getValue());
             }
             disjuncts.add(sub);
           }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java
index 82645fd..f00e20d 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java
@@ -746,8 +746,8 @@ public abstract class BaseCloudSolrClient extends SolrClient {
         throw toThrow;
       }
     }
-    for (String updateType: versions.keySet()) {
-      condensed.add(updateType, versions.get(updateType));
+    for (Map.Entry<String, NamedList> entry : versions.entrySet()) {
+      condensed.add(entry.getKey(), entry.getValue());
     }
     condensed.add("responseHeader", cheader);
     return condensed;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
index f871473..8464cf3 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
@@ -359,9 +359,9 @@ public class CloudSolrStream extends TupleStream implements Expressible {
     }
 
     // Check collection case insensitive
-    for(String collectionMapKey : collectionsMap.keySet()) {
-      if(collectionMapKey.equalsIgnoreCase(collectionName)) {
-        return collectionsMap.get(collectionMapKey).getActiveSlicesArr();
+    for(Entry<String, DocCollection> entry : collectionsMap.entrySet()) {
+      if(entry.getKey().equalsIgnoreCase(collectionName)) {
+        return entry.getValue().getActiveSlicesArr();
       }
     }
 
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
index e750bcc..d2ef18c 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
@@ -298,9 +298,9 @@ public class DeepRandomStream extends TupleStream implements Expressible {
     }
 
     // Check collection case insensitive
-    for(String collectionMapKey : collectionsMap.keySet()) {
-      if(collectionMapKey.equalsIgnoreCase(collectionName)) {
-        return collectionsMap.get(collectionMapKey).getActiveSlicesArr();
+    for(Entry<String, DocCollection> entry : collectionsMap.entrySet()) {
+      if(entry.getKey().equalsIgnoreCase(collectionName)) {
+        return entry.getValue().getActiveSlicesArr();
       }
     }
 
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java
index 3212dc6..22b807f 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java
@@ -424,8 +424,8 @@ public class FeaturesSelectionStream extends TupleStream implements Expressible{
       params.add(DISTRIB, "false");
       params.add("fq","{!igain}");
 
-      for(String key : paramsMap.keySet()) {
-        params.add(key, paramsMap.get(key));
+      for(Map.Entry<String, String> entry : paramsMap.entrySet()) {
+        params.add(entry.getKey(), entry.getValue());
       }
 
       params.add("outcome", outcome);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SignificantTermsStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SignificantTermsStream.java
index fbe893d..80981e8 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SignificantTermsStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SignificantTermsStream.java
@@ -315,10 +315,10 @@ public class SignificantTermsStream extends TupleStream implements Expressible{
 
         List<Map> maps = new ArrayList();
 
-        for(String term : mergeFreqs.keySet() ) {
-          int[] freqs = mergeFreqs.get(term);
+        for(Map.Entry<String, int[]> entry : mergeFreqs.entrySet()) {
+          int[] freqs = entry.getValue();
           Map map = new HashMap();
-          map.put("term", term);
+          map.put("term", entry.getKey());
           map.put("background", freqs[0]);
           map.put("foreground", freqs[1]);
 
@@ -389,8 +389,8 @@ public class SignificantTermsStream extends TupleStream implements Expressible{
       params.add(DISTRIB, "false");
       params.add("fq","{!significantTerms}");
 
-      for(String key : paramsMap.keySet()) {
-        params.add(key, paramsMap.get(key));
+      for(Map.Entry<String, String> entry : paramsMap.entrySet()) {
+        params.add(entry.getKey(), entry.getValue());
       }
 
       params.add("minDocFreq", Float.toString(minDocFreq));
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java
index 6c6df59..1bb1546 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java
@@ -302,16 +302,16 @@ public class StatsStream extends TupleStream implements Expressible  {
       }
     }
 
-    for(String field : m.keySet()) {
+    for(Entry<String, List<String>> entry : m.entrySet()) {
       StringBuilder buf = new StringBuilder();
-      List<String> stats = m.get(field);
+      List<String> stats = entry.getValue();
       buf.append("{!");
 
       for(String stat : stats) {
         buf.append(stat).append("=").append("true ");
       }
 
-      buf.append("}").append(field);
+      buf.append("}").append(entry.getKey());
       params.add("stats.field", buf.toString());
     }
   }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
index dd9be6a..a493f5a 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
@@ -627,8 +627,8 @@ public class TextLogitStream extends TupleStream implements Expressible {
       params.add("terms", TextLogitStream.toString(terms));
       params.add("idfs", TextLogitStream.toString(idfs));
 
-      for(String key : paramsMap.keySet()) {
-        params.add(key, paramsMap.get(key));
+      for(Entry<String, String> entry : paramsMap.entrySet()) {
+        params.add(entry.getKey(), entry.getValue());
       }
 
       if(weights != null) {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ZplotStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ZplotStream.java
index 66d9867..3b001cd 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ZplotStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ZplotStream.java
@@ -197,9 +197,9 @@ public class ZplotStream extends TupleStream implements Expressible {
       //Handle the vectors
       for (int i = 0; i < numTuples; i++) {
         Tuple tuple = new Tuple(new HashMap());
-        for (String key : evaluated.keySet()) {
-          List l = (List) evaluated.get(key);
-          tuple.put(key, l.get(i));
+        for (Map.Entry<String, Object> entry : evaluated.entrySet()) {
+          List l = (List) entry.getValue();
+          tuple.put(entry.getKey(), l.get(i));
         }
 
         outTuples.add(tuple);