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

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 466f083  Replace java.util.stream with for each in high frequency 
codes (#13845)
466f083 is described below

commit 466f083dac457866befc7ef77deef72c316c8f38
Author: 吴伟杰 <[email protected]>
AuthorDate: Wed Dec 1 14:10:40 2021 +0800

    Replace java.util.stream with for each in high frequency codes (#13845)
    
    * Replace stream with for loop
    
    * Rename variables
    
    * Changes for code style
    
    * Avoid using ArrayList without size
    
    * Avoid using ArrayList without size and rename
---
 .../route/engine/condition/ShardingConditions.java |  8 +++-
 .../impl/WhereClauseShardingConditionEngine.java   | 14 ++++--
 .../engine/type/ShardingRouteEngineFactory.java    |  9 +++-
 .../type/unicast/ShardingUnicastRoutingEngine.java |  5 +-
 .../shardingsphere/sharding/rule/ShardingRule.java | 25 ++++++++--
 .../pagination/engine/PaginationContextEngine.java |  6 ++-
 .../infra/binder/segment/table/TablesContext.java  | 53 ++++++++++++++++------
 .../statement/dml/SelectStatementContext.java      |  9 ++--
 .../sql/context/ExecutionContextBuilder.java       |  7 ++-
 .../infra/rewrite/SQLRewriteEntry.java             |  5 +-
 .../driver/executor/DriverJDBCExecutor.java        |  9 +++-
 .../batch/BatchPreparedStatementExecutor.java      | 25 ++++++++--
 .../statement/ShardingSpherePreparedStatement.java | 16 +++++--
 .../singletable/route/SingleTableSQLRouter.java    | 19 ++++++--
 .../singletable/rule/SingleTableRule.java          |  8 +++-
 .../spi/ShardingSphereServiceLoader.java           | 15 +++++-
 16 files changed, 182 insertions(+), 51 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingConditions.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingConditions.java
index 6118968..d958b59 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingConditions.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingConditions.java
@@ -138,12 +138,16 @@ public final class ShardingConditions {
         Collection<SelectStatement> result = new LinkedList<>();
         if (sqlStatementContext instanceof SelectStatementContext) {
             result.add(((SelectStatementContext) 
sqlStatementContext).getSqlStatement());
-            result.addAll(((SelectStatementContext) 
sqlStatementContext).getSubqueryContexts().values().stream().map(SelectStatementContext::getSqlStatement).collect(Collectors.toList()));
+            for (SelectStatementContext each : ((SelectStatementContext) 
sqlStatementContext).getSubqueryContexts().values()) {
+                result.add(each.getSqlStatement());
+            }
         }
         if (sqlStatementContext instanceof InsertStatementContext && null != 
((InsertStatementContext) sqlStatementContext).getInsertSelectContext()) {
             SelectStatementContext selectStatementContext = 
((InsertStatementContext) 
sqlStatementContext).getInsertSelectContext().getSelectStatementContext();
             result.add(selectStatementContext.getSqlStatement());
-            
result.addAll(selectStatementContext.getSubqueryContexts().values().stream().map(SelectStatementContext::getSqlStatement).collect(Collectors.toList()));
+            for (SelectStatementContext each : 
selectStatementContext.getSubqueryContexts().values()) {
+                result.add(each.getSqlStatement());
+            }
         }
         return result;
     }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/WhereClauseShardingConditionEngine.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/WhereClauseShardingConditionEngine.java
index 61dbe0c..2b928fd 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/WhereClauseShardingConditionEngine.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/WhereClauseShardingConditionEngine.java
@@ -53,7 +53,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 /**
  * Sharding condition engine for where clause.
@@ -95,9 +94,16 @@ public final class WhereClauseShardingConditionEngine 
implements ShardingConditi
     }
     
     private Map<String, String> getColumnTableNames(final 
SQLStatementContext<?> sqlStatementContext, final Collection<AndPredicate> 
andPredicates) {
-        Collection<ColumnProjection> columns = 
andPredicates.stream().flatMap(each -> each.getPredicates().stream())
-                .flatMap(each -> 
ColumnExtractor.extract(each).stream().map(this::buildColumnProjection)).collect(Collectors.toList());
-        return sqlStatementContext.getTablesContext().findTableName(columns, 
schema);
+        Collection<ColumnProjection> result = new LinkedList<>();
+        for (AndPredicate each : andPredicates) {
+            for (ExpressionSegment expressionSegment : each.getPredicates()) {
+                for (ColumnSegment columnSegment : 
ColumnExtractor.extract(expressionSegment)) {
+                    ColumnProjection columnProjection = 
buildColumnProjection(columnSegment);
+                    result.add(columnProjection);
+                }
+            }
+        }
+        return sqlStatementContext.getTablesContext().findTableName(result, 
schema);
     }
     
     private ColumnProjection buildColumnProjection(final ColumnSegment 
segment) {
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java
index 45d93d8..917df12 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.binder.type.TableAvailable;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
 import 
org.apache.shardingsphere.sharding.route.engine.condition.value.ShardingConditionValue;
 import 
org.apache.shardingsphere.sharding.route.engine.type.broadcast.ShardingDataSourceGroupBroadcastRoutingEngine;
@@ -203,8 +204,12 @@ public final class ShardingRouteEngineFactory {
     }
     
     private static String getLogicTableName(final ShardingConditions 
shardingConditions, final Collection<String> tableNames) {
-        return shardingConditions.getConditions().stream().flatMap(each -> 
each.getValues().stream())
-                
.map(ShardingConditionValue::getTableName).findFirst().orElseGet(() -> 
tableNames.iterator().next());
+        for (ShardingCondition each : shardingConditions.getConditions()) {
+            for (ShardingConditionValue shardingConditionValue : 
each.getValues()) {
+                return shardingConditionValue.getTableName();
+            }
+        }
+        return tableNames.iterator().next();
     }
     
     private static boolean isShardingStandardQuery(final Collection<String> 
tableNames, final ShardingRule shardingRule) {
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngine.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngine.java
index 8b78067..7df32c0 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngine.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngine.java
@@ -51,7 +51,10 @@ public final class ShardingUnicastRoutingEngine implements 
ShardingRouteEngine {
         String dataSourceName = 
getRandomDataSourceName(shardingRule.getDataSourceNames());
         RouteMapper dataSourceMapper = new RouteMapper(dataSourceName, 
dataSourceName);
         if (shardingRule.isAllBroadcastTables(logicTables)) {
-            List<RouteMapper> tableMappers = logicTables.stream().map(each -> 
new RouteMapper(each, each)).collect(Collectors.toCollection(() -> new 
ArrayList<>(logicTables.size())));
+            List<RouteMapper> tableMappers = new 
ArrayList<>(logicTables.size());
+            for (String each : logicTables) {
+                tableMappers.add(new RouteMapper(each, each));
+            }
             result.getRouteUnits().add(new RouteUnit(dataSourceMapper, 
tableMappers));
         } else if (logicTables.isEmpty()) {
             result.getRouteUnits().add(new RouteUnit(dataSourceMapper, 
Collections.emptyList()));
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 548b200..7f8ec33 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -273,7 +273,12 @@ public final class ShardingRule implements SchemaRule, 
DataNodeContainedRule, Ta
      * @return binding table rule
      */
     public Optional<BindingTableRule> findBindingTableRule(final String 
logicTableName) {
-        return bindingTableRules.stream().filter(each -> 
each.hasLogicTable(logicTableName)).findFirst();
+        for (BindingTableRule each : bindingTableRules) {
+            if (each.hasLogicTable(logicTableName)) {
+                return Optional.of(each);
+            }
+        }
+        return Optional.empty();
     }
     
     /**
@@ -293,7 +298,15 @@ public final class ShardingRule implements SchemaRule, 
DataNodeContainedRule, Ta
      * @return whether logic table is all sharding table or not
      */
     public boolean isAllShardingTables(final Collection<String> 
logicTableNames) {
-        return !logicTableNames.isEmpty() && 
logicTableNames.stream().allMatch(this::isShardingTable);
+        if (logicTableNames.isEmpty()) {
+            return false;
+        }
+        for (String each : logicTableNames) {
+            if (!isShardingTable(each)) {
+                return false;
+            }
+        }
+        return true;
     }
     
     /**
@@ -429,7 +442,13 @@ public final class ShardingRule implements SchemaRule, 
DataNodeContainedRule, Ta
      * @return sharding logic table names
      */
     public Collection<String> getShardingLogicTableNames(final 
Collection<String> logicTableNames) {
-        return 
logicTableNames.stream().filter(this::isShardingTable).collect(Collectors.toCollection(LinkedList::new));
+        Collection<String> result = new LinkedList<>();
+        for (String each : logicTableNames) {
+            if (isShardingTable(each)) {
+                result.add(each);
+            }
+        }
+        return result;
     }
     
     /**
diff --git 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/pagination/engine/PaginationContextEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/pagination/engine/PaginationContextEngine.java
index dbe12e0..6c58a58 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/pagination/engine/PaginationContextEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/select/pagination/engine/PaginationContextEngine.java
@@ -36,7 +36,6 @@ import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 /**
  * Pagination context engine.
@@ -57,7 +56,10 @@ public final class PaginationContextEngine {
             return new 
LimitPaginationContextEngine().createPaginationContext(limitSegment.get(), 
parameters);
         }
         Optional<TopProjectionSegment> topProjectionSegment = 
findTopProjection(selectStatement);
-        Collection<ExpressionSegment> expressions = 
getWhereSegments(selectStatement).stream().map(WhereSegment::getExpr).collect(Collectors.toList());
+        Collection<ExpressionSegment> expressions = new LinkedList<>();
+        for (WhereSegment each : getWhereSegments(selectStatement)) {
+            expressions.add(each.getExpr());
+        }
         if (topProjectionSegment.isPresent()) {
             return new 
TopPaginationContextEngine().createPaginationContext(topProjectionSegment.get(),
 expressions, parameters);
         }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
index 97f8c52..2c2656d 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/table/TablesContext.java
@@ -33,7 +33,10 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.TreeMap;
@@ -66,19 +69,29 @@ public final class TablesContext {
         if (tableSegments.isEmpty()) {
             return;
         }
-        Collection<SimpleTableSegment> simpleTableSegments = 
tableSegments.stream().filter(each 
-            -> each instanceof SimpleTableSegment).map(each -> 
(SimpleTableSegment) each).collect(Collectors.toList());
-        for (SimpleTableSegment each : simpleTableSegments) {
-            tables.add(each);
-            tableNames.add(each.getTableName().getIdentifier().getValue());
-            each.getOwner().ifPresent(optional -> 
schemaNames.add(optional.getIdentifier().getValue()));
+        for (TableSegment each : tableSegments) {
+            if (!(each instanceof SimpleTableSegment)) {
+                continue;
+            }
+            SimpleTableSegment simpleTableSegment = (SimpleTableSegment) each;
+            tables.add(simpleTableSegment);
+            
tableNames.add(simpleTableSegment.getTableName().getIdentifier().getValue());
+            simpleTableSegment.getOwner().ifPresent(owner -> 
schemaNames.add(owner.getIdentifier().getValue()));
         }
-        Collection<SubqueryTableSegment> subqueryTableSegments = 
tableSegments.stream().filter(each
-            -> each instanceof SubqueryTableSegment).map(each -> 
(SubqueryTableSegment) each).collect(Collectors.toList());
-        for (SubqueryTableSegment each : subqueryTableSegments) {
-            SelectStatementContext subqueryContext = 
subqueryContexts.get(each.getSubquery().getStartIndex());
+        for (TableSegment each : tableSegments) {
+            if (!(each instanceof SubqueryTableSegment)) {
+                continue;
+            }
+            SubqueryTableSegment subqueryTableSegment = (SubqueryTableSegment) 
each;
+            SelectStatementContext subqueryContext = 
subqueryContexts.get(subqueryTableSegment.getSubquery().getStartIndex());
             Collection<SubqueryTableContext> subqueryTableContexts = new 
SubqueryTableContextEngine().createSubqueryTableContexts(subqueryContext, 
each.getAlias().orElse(null));
-            
subqueryTables.putAll(subqueryTableContexts.stream().filter(subQuery -> null != 
subQuery.getAlias()).collect(Collectors.groupingBy(SubqueryTableContext::getAlias)));
+            Map<String, List<SubqueryTableContext>> result = new HashMap<>();
+            for (SubqueryTableContext subQuery : subqueryTableContexts) {
+                if (null != subQuery.getAlias()) {
+                    result.computeIfAbsent(subQuery.getAlias(), unused -> new 
LinkedList<>()).add(subQuery);
+                }
+            }
+            subqueryTables.putAll(result);
         }
     }
     
@@ -101,11 +114,20 @@ public final class TablesContext {
     public Map<String, String> findTableName(final 
Collection<ColumnProjection> columns, final ShardingSphereSchema schema) {
         if (1 == tables.size()) {
             String tableName = 
tables.iterator().next().getTableName().getIdentifier().getValue();
-            return 
columns.stream().collect(Collectors.toMap(ColumnProjection::getExpression, each 
-> tableName, (oldValue, currentValue) -> oldValue));
+            Map<String, String> result = new LinkedHashMap<>(columns.size(), 
1);
+            for (ColumnProjection each : columns) {
+                result.putIfAbsent(each.getExpression(), tableName);
+            }
+            return result;
         }
         Map<String, String> result = new HashMap<>(columns.size(), 1);
         result.putAll(findTableNameFromSQL(getOwnerColumnNames(columns)));
-        Collection<String> columnNames = columns.stream().filter(each -> null 
== each.getOwner()).map(ColumnProjection::getName).collect(Collectors.toSet());
+        Collection<String> columnNames = new LinkedHashSet<>();
+        for (ColumnProjection each : columns) {
+            if (null == each.getOwner()) {
+                columnNames.add(each.getName());
+            }
+        }
         result.putAll(findTableNameFromMetaData(columnNames, schema));
         if (result.size() < columns.size() && !subqueryTables.isEmpty()) {
             appendRemainingResult(columns, result);
@@ -185,6 +207,9 @@ public final class TablesContext {
      */
     public Optional<String> getSchemaName() {
         Preconditions.checkState(schemaNames.size() <= 1, "Can not support 
multiple different schema.");
-        return schemaNames.stream().findFirst();
+        for (String each : schemaNames) {
+            return Optional.of(each);
+        }
+        return Optional.empty();
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
index e31fd05..a896b48 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementContext.java
@@ -255,11 +255,14 @@ public final class SelectStatementContext extends 
CommonSQLStatementContext<Sele
     }
     
     private Collection<TableSegment> getAllTableSegments() {
-        Collection<TableSegment> result = new LinkedList<>();
         TableExtractor tableExtractor = new TableExtractor();
         tableExtractor.extractTablesFromSelect(getSqlStatement());
-        result.addAll(tableExtractor.getRewriteTables());
-        result.addAll(tableExtractor.getTableContext().stream().filter(each -> 
each instanceof SubqueryTableSegment).collect(Collectors.toList()));
+        Collection<TableSegment> result = new 
LinkedList<>(tableExtractor.getRewriteTables());
+        for (TableSegment each : tableExtractor.getTableContext()) {
+            if (each instanceof SubqueryTableSegment) {
+                result.add(each);
+            }
+        }
         return result;
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilder.java
index d03ca30..eed159d 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilder.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteUnit;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashSet;
@@ -74,7 +75,11 @@ public final class ExecutionContextBuilder {
         if (null == tableMappers) {
             return Collections.emptyList();
         }
-        return tableMappers.stream().map(routeMapper -> new 
RouteMapper(routeMapper.getLogicName(), 
routeMapper.getActualName())).collect(Collectors.toList());
+        List<RouteMapper> result = new ArrayList<>(tableMappers.size());
+        for (RouteMapper each : tableMappers) {
+            result.add(new RouteMapper(each.getLogicName(), 
each.getActualName()));
+        }
+        return result;
     }
     
     private static List<RouteMapper> getGenericTableRouteMappers(final 
SQLStatementContext<?> sqlStatementContext) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
index aaa0667..8a4e91e 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
@@ -33,6 +33,7 @@ import 
org.apache.shardingsphere.spi.ordered.OrderedSPIRegistry;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 /**
  * SQL rewrite entry.
@@ -80,6 +81,8 @@ public final class SQLRewriteEntry {
     
     @SuppressWarnings({"unchecked", "rawtypes"})
     private void decorate(final Map<ShardingSphereRule, 
SQLRewriteContextDecorator> decorators, final SQLRewriteContext 
sqlRewriteContext, final RouteContext routeContext) {
-        decorators.forEach((key, value) -> value.decorate(key, props, 
sqlRewriteContext, routeContext));
+        for (Entry<ShardingSphereRule, SQLRewriteContextDecorator> entry : 
decorators.entrySet()) {
+            entry.getValue().decorate(entry.getKey(), props, 
sqlRewriteContext, routeContext);
+        }
     }
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
index 5d03ae8..f2c25ec 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
@@ -35,9 +35,9 @@ import 
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * Driver JDBC executor.
@@ -145,6 +145,11 @@ public final class DriverJDBCExecutor {
     }
     
     private void refreshMetaData(final SQLStatement sqlStatement, final 
Collection<RouteUnit> routeUnits) throws SQLException {
-        metadataRefreshEngine.refresh(sqlStatement, 
routeUnits.stream().map(each -> 
each.getDataSourceMapper().getLogicName()).collect(Collectors.toList()));
+        List<String> result = new ArrayList<>(routeUnits.size());
+        for (RouteUnit each : routeUnits) {
+            String logicName = each.getDataSourceMapper().getLogicName();
+            result.add(logicName);
+        }
+        metadataRefreshEngine.refresh(sqlStatement, result);
     }
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
index 7a5fce7..3704221 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
@@ -35,6 +35,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
@@ -92,7 +93,12 @@ public final class BatchPreparedStatementExecutor {
     }
     
     private Collection<BatchExecutionUnit> createBatchExecutionUnits(final 
Collection<ExecutionUnit> executionUnits) {
-        return 
executionUnits.stream().map(BatchExecutionUnit::new).collect(Collectors.toList());
+        List<BatchExecutionUnit> result = new 
ArrayList<>(executionUnits.size());
+        for (ExecutionUnit executionUnit : executionUnits) {
+            BatchExecutionUnit batchExecutionUnit = new 
BatchExecutionUnit(executionUnit);
+            result.add(batchExecutionUnit);
+        }
+        return result;
     }
     
     private void handleOldBatchExecutionUnits(final 
Collection<BatchExecutionUnit> newExecutionUnits) {
@@ -100,7 +106,11 @@ public final class BatchPreparedStatementExecutor {
     }
     
     private void reviseBatchExecutionUnits(final BatchExecutionUnit 
batchExecutionUnit) {
-        batchExecutionUnits.stream().filter(each -> 
each.equals(batchExecutionUnit)).forEach(each -> reviseBatchExecutionUnit(each, 
batchExecutionUnit));
+        for (BatchExecutionUnit each : batchExecutionUnits) {
+            if (each.equals(batchExecutionUnit)) {
+                reviseBatchExecutionUnit(each, batchExecutionUnit);
+            }
+        }
     }
     
     private void reviseBatchExecutionUnit(final BatchExecutionUnit 
oldBatchExecutionUnit, final BatchExecutionUnit newBatchExecutionUnit) {
@@ -110,7 +120,9 @@ public final class BatchPreparedStatementExecutor {
     
     private void handleNewBatchExecutionUnits(final 
Collection<BatchExecutionUnit> newExecutionUnits) {
         newExecutionUnits.removeAll(batchExecutionUnits);
-        newExecutionUnits.forEach(each -> each.mapAddBatchCount(batchCount));
+        for (BatchExecutionUnit each : newExecutionUnits) {
+            each.mapAddBatchCount(batchCount);
+        }
         batchExecutionUnits.addAll(newExecutionUnits);
     }
     
@@ -184,8 +196,11 @@ public final class BatchPreparedStatementExecutor {
      */
     public List<Statement> getStatements() {
         List<Statement> result = new LinkedList<>();
-        for (ExecutionGroup<JDBCExecutionUnit> each : 
executionGroupContext.getInputGroups()) {
-            
result.addAll(each.getInputs().stream().map(JDBCExecutionUnit::getStorageResource).collect(Collectors.toList()));
+        for (ExecutionGroup<JDBCExecutionUnit> eachGroup : 
executionGroupContext.getInputGroups()) {
+            for (JDBCExecutionUnit eachUnit : eachGroup.getInputs()) {
+                Statement storageResource = eachUnit.getStorageResource();
+                result.add(storageResource);
+            }
         }
         return result;
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 0ee626a..bc00d9d 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -45,6 +45,7 @@ import 
org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
+import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -196,7 +197,12 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         if (executionContext.getRouteContext().isFederated()) {
             return 
Collections.singletonList(executor.getFederationExecutor().getResultSet());
         }
-        return 
statements.stream().map(this::getResultSet).collect(Collectors.toList());
+        List<ResultSet> result = new ArrayList<>(statements.size());
+        for (PreparedStatement each : statements) {
+            ResultSet resultSet = getResultSet(each);
+            result.add(resultSet);
+        }
+        return result;
     }
     
     private List<QueryResult> executeQuery0() throws SQLException {
@@ -467,8 +473,12 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new DriverExecutionPrepareEngine<>(
                 JDBCDriverType.PREPARED_STATEMENT, 
metaDataContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
                 connection.getConnectionManager(), statementOption, 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules());
-        
batchPreparedStatementExecutor.init(prepareEngine.prepare(executionContext.getRouteContext(),
-                new 
ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits()).stream().map(BatchExecutionUnit::getExecutionUnit).collect(Collectors.toList())));
+        List<ExecutionUnit> executionUnits = new 
ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits().size());
+        for (BatchExecutionUnit each : 
batchPreparedStatementExecutor.getBatchExecutionUnits()) {
+            ExecutionUnit executionUnit = each.getExecutionUnit();
+            executionUnits.add(executionUnit);
+        }
+        
batchPreparedStatementExecutor.init(prepareEngine.prepare(executionContext.getRouteContext(),
 executionUnits));
         setBatchParametersForStatements();
     }
     
diff --git 
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java
 
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java
index 9b387d9..48295f0 100644
--- 
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java
+++ 
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/SingleTableSQLRouter.java
@@ -29,10 +29,11 @@ import org.apache.shardingsphere.infra.route.SQLRouter;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.singletable.constant.SingleTableOrder;
 import org.apache.shardingsphere.singletable.rule.SingleTableRule;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
 
 import java.util.Collection;
-import java.util.stream.Collectors;
+import java.util.HashSet;
 
 /**
  * Single table SQL router.
@@ -56,10 +57,18 @@ public final class SingleTableSQLRouter implements 
SQLRouter<SingleTableRule> {
     }
     
     private Collection<String> getSingleTableNames(final 
SQLStatementContext<?> sqlStatementContext, final SingleTableRule rule, final 
RouteContext routeContext) {
-        Collection<String> tableNames = sqlStatementContext instanceof 
TableAvailable
-                ? ((TableAvailable) 
sqlStatementContext).getAllTables().stream().map(each -> 
each.getTableName().getIdentifier().getValue()).collect(Collectors.toSet())
-                : sqlStatementContext.getTablesContext().getTableNames();
-        return routeContext.getRouteUnits().isEmpty() && 
sqlStatementContext.getSqlStatement() instanceof CreateTableStatement ? 
tableNames : rule.getSingleTableNames(tableNames); 
+        Collection<String> result;
+        if (sqlStatementContext instanceof TableAvailable) {
+            Collection<SimpleTableSegment> allTables = ((TableAvailable) 
sqlStatementContext).getAllTables();
+            result = new HashSet<>(allTables.size(), 1);
+            for (SimpleTableSegment each : allTables) {
+                String value = each.getTableName().getIdentifier().getValue();
+                result.add(value);
+            }
+        } else {
+            result = sqlStatementContext.getTablesContext().getTableNames();
+        }
+        return routeContext.getRouteUnits().isEmpty() && 
sqlStatementContext.getSqlStatement() instanceof CreateTableStatement ? result 
: rule.getSingleTableNames(result); 
     }
     
     private void validateSameDataSource(final SQLStatementContext<?> 
sqlStatementContext, final SingleTableRule rule,  
diff --git 
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/rule/SingleTableRule.java
 
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/rule/SingleTableRule.java
index 3de700f..81e3032 100644
--- 
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/rule/SingleTableRule.java
+++ 
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/rule/SingleTableRule.java
@@ -135,7 +135,13 @@ public final class SingleTableRule implements SchemaRule, 
DataNodeContainedRule,
      * @return sharding logic table names
      */
     public Collection<String> getSingleTableNames(final Collection<String> 
logicTableNames) {
-        return logicTableNames.stream().filter(each -> 
singleTableDataNodes.containsKey(each.toLowerCase())).collect(Collectors.toCollection(LinkedList::new));
+        Collection<String> result = new LinkedList<>();
+        for (String each : logicTableNames) {
+            if (singleTableDataNodes.containsKey(each.toLowerCase())) {
+                result.add(each);
+            }
+        }
+        return result;
     }
     
     @Override
diff --git 
a/shardingsphere-spi/src/main/java/org/apache/shardingsphere/spi/ShardingSphereServiceLoader.java
 
b/shardingsphere-spi/src/main/java/org/apache/shardingsphere/spi/ShardingSphereServiceLoader.java
index 68a2c4b..f828347 100644
--- 
a/shardingsphere-spi/src/main/java/org/apache/shardingsphere/spi/ShardingSphereServiceLoader.java
+++ 
b/shardingsphere-spi/src/main/java/org/apache/shardingsphere/spi/ShardingSphereServiceLoader.java
@@ -21,13 +21,13 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.spi.exception.ServiceLoaderInstantiationException;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 
 /**
  * ShardingSphere service loader.
@@ -77,7 +77,18 @@ public final class ShardingSphereServiceLoader {
      */
     @SuppressWarnings("unchecked")
     public static <T> Collection<T> newServiceInstances(final Class<T> 
service) {
-        return SERVICES.containsKey(service) ? 
SERVICES.get(service).stream().map(each -> (T) 
newServiceInstance(each.getClass())).collect(Collectors.toList()) : 
Collections.emptyList();
+        if (!SERVICES.containsKey(service)) {
+            return Collections.emptyList();
+        }
+        Collection<Object> services = SERVICES.get(service);
+        if (services.isEmpty()) {
+            return Collections.emptyList();
+        }
+        Collection<T> result = new ArrayList<>(services.size());
+        for (Object each : services) {
+            result.add((T) newServiceInstance(each.getClass()));
+        }
+        return result;
     }
     
     private static Object newServiceInstance(final Class<?> clazz) {

Reply via email to