From cb4d6f097c59ee320957c283cfa05c07525d6506 Mon Sep 17 00:00:00 2001 From: stsypanov Date: Thu, 7 Mar 2019 10:58:23 +0200 Subject: [PATCH] Use StringJoiner where possible to simplify String joining --- .../org/springframework/util/ObjectUtils.java | 16 +++++----------- .../expression/spel/ast/InlineList.java | 11 ++++------- .../org/springframework/http/HttpHeaders.java | 12 ++++-------- .../condition/AbstractRequestCondition.java | 16 ++++++---------- .../mvc/condition/AbstractRequestCondition.java | 16 ++++++---------- 5 files changed, 25 insertions(+), 46 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/util/ObjectUtils.java b/spring-core/src/main/java/org/springframework/util/ObjectUtils.java index 2511858a979..f7173025c8c 100644 --- a/spring-core/src/main/java/org/springframework/util/ObjectUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ObjectUtils.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Map; import java.util.Optional; +import java.util.StringJoiner; import org.springframework.lang.Nullable; @@ -709,18 +710,11 @@ public abstract class ObjectUtils { if (length == 0) { return EMPTY_ARRAY; } - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < length; i++) { - if (i == 0) { - sb.append(ARRAY_START); - } - else { - sb.append(ARRAY_ELEMENT_SEPARATOR); - } - sb.append(String.valueOf(array[i])); + StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END); + for (Object o : array) { + sj.add(String.valueOf(o)); } - sb.append(ARRAY_END); - return sb.toString(); + return sj.toString(); } /** diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java index 7197cf4dce1..fbe9d803645 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/InlineList.java @@ -19,6 +19,7 @@ package org.springframework.expression.spel.ast; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.StringJoiner; import org.springframework.asm.MethodVisitor; import org.springframework.expression.EvaluationException; @@ -102,17 +103,13 @@ public class InlineList extends SpelNodeImpl { @Override public String toStringAST() { - StringBuilder sb = new StringBuilder("{"); + StringJoiner sj = new StringJoiner(",", "{", "}"); // String ast matches input string, not the 'toString()' of the resultant collection, which would use [] int count = getChildCount(); for (int c = 0; c < count; c++) { - if (c > 0) { - sb.append(","); - } - sb.append(getChild(c).toStringAST()); + sj.add(getChild(c).toStringAST()); } - sb.append("}"); - return sb.toString(); + return sj.toString(); } /** diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index 0e063908362..e22f4457a37 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -633,15 +633,11 @@ public class HttpHeaders implements MultiValueMap, Serializable * as specified by the {@code Accept-Charset} header. */ public void setAcceptCharset(List acceptableCharsets) { - StringBuilder builder = new StringBuilder(); - for (Iterator iterator = acceptableCharsets.iterator(); iterator.hasNext();) { - Charset charset = iterator.next(); - builder.append(charset.name().toLowerCase(Locale.ENGLISH)); - if (iterator.hasNext()) { - builder.append(", "); - } + StringJoiner joiner = new StringJoiner(", "); + for (Charset charset : acceptableCharsets) { + joiner.add(charset.name().toLowerCase(Locale.ENGLISH)); } - set(ACCEPT_CHARSET, builder.toString()); + set(ACCEPT_CHARSET, joiner.toString()); } /** diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java index 657a4e7779d..3d8365694e8 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/AbstractRequestCondition.java @@ -17,7 +17,7 @@ package org.springframework.web.reactive.result.condition; import java.util.Collection; -import java.util.Iterator; +import java.util.StringJoiner; import org.springframework.lang.Nullable; @@ -50,16 +50,12 @@ public abstract class AbstractRequestCondition iterator = getContent().iterator(); iterator.hasNext();) { - Object expression = iterator.next(); - builder.append(expression.toString()); - if (iterator.hasNext()) { - builder.append(getToStringInfix()); - } + String infix = getToStringInfix(); + StringJoiner joiner = new StringJoiner(infix, "[", "]"); + for (Object expression : getContent()) { + joiner.add(expression.toString()); } - builder.append("]"); - return builder.toString(); + return joiner.toString(); } /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java index 50a99f04a18..5de3030a070 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/AbstractRequestCondition.java @@ -17,7 +17,7 @@ package org.springframework.web.servlet.mvc.condition; import java.util.Collection; -import java.util.Iterator; +import java.util.StringJoiner; import org.springframework.lang.Nullable; @@ -74,16 +74,12 @@ public abstract class AbstractRequestCondition iterator = getContent().iterator(); iterator.hasNext();) { - Object expression = iterator.next(); - builder.append(expression.toString()); - if (iterator.hasNext()) { - builder.append(getToStringInfix()); - } + String infix = getToStringInfix(); + StringJoiner joiner = new StringJoiner(infix, "[", "]"); + for (Object expression : getContent()) { + joiner.add(expression.toString()); } - builder.append("]"); - return builder.toString(); + return joiner.toString(); } }