Use StringJoiner where possible to simplify String joining
Closes gh-23300
This commit is contained in:
parent
5190eaf503
commit
1d6e44ab04
|
|
@ -18,10 +18,10 @@ package org.springframework.core.style;
|
|||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
|
@ -82,20 +82,15 @@ public class DefaultValueStyler implements ValueStyler {
|
|||
}
|
||||
|
||||
private <K, V> String style(Map<K, V> value) {
|
||||
StringBuilder result = new StringBuilder(value.size() * 8 + 16);
|
||||
result.append(MAP + "[");
|
||||
for (Iterator<Map.Entry<K, V>> it = value.entrySet().iterator(); it.hasNext();) {
|
||||
Map.Entry<K, V> entry = it.next();
|
||||
result.append(style(entry));
|
||||
if (it.hasNext()) {
|
||||
result.append(',').append(' ');
|
||||
}
|
||||
}
|
||||
if (value.isEmpty()) {
|
||||
result.append(EMPTY);
|
||||
return MAP + '[' + EMPTY + ']';
|
||||
}
|
||||
result.append("]");
|
||||
return result.toString();
|
||||
|
||||
StringJoiner result = new StringJoiner(", ", "[", "]");
|
||||
for (Map.Entry<K, V> entry : value.entrySet()) {
|
||||
result.add(style(entry));
|
||||
}
|
||||
return MAP + result;
|
||||
}
|
||||
|
||||
private String style(Map.Entry<?, ?> value) {
|
||||
|
|
@ -103,19 +98,17 @@ public class DefaultValueStyler implements ValueStyler {
|
|||
}
|
||||
|
||||
private String style(Collection<?> value) {
|
||||
StringBuilder result = new StringBuilder(value.size() * 8 + 16);
|
||||
result.append(getCollectionTypeString(value)).append('[');
|
||||
for (Iterator<?> i = value.iterator(); i.hasNext();) {
|
||||
result.append(style(i.next()));
|
||||
if (i.hasNext()) {
|
||||
result.append(',').append(' ');
|
||||
}
|
||||
}
|
||||
String collectionType = getCollectionTypeString(value);
|
||||
|
||||
if (value.isEmpty()) {
|
||||
result.append(EMPTY);
|
||||
return collectionType + '[' + EMPTY + ']';
|
||||
}
|
||||
result.append("]");
|
||||
return result.toString();
|
||||
|
||||
StringJoiner result = new StringJoiner(", ", "[", "]");
|
||||
for (Object o : value) {
|
||||
result.add(style(o));
|
||||
}
|
||||
return collectionType + result;
|
||||
}
|
||||
|
||||
private String getCollectionTypeString(Collection<?> value) {
|
||||
|
|
@ -131,20 +124,15 @@ public class DefaultValueStyler implements ValueStyler {
|
|||
}
|
||||
|
||||
private String styleArray(Object[] array) {
|
||||
StringBuilder result = new StringBuilder(array.length * 8 + 16);
|
||||
result.append(ARRAY + "<").append(ClassUtils.getShortName(array.getClass().getComponentType())).append(">[");
|
||||
for (int i = 0; i < array.length - 1; i++) {
|
||||
result.append(style(array[i]));
|
||||
result.append(',').append(' ');
|
||||
if (array.length == 0) {
|
||||
return ARRAY + '<' + ClassUtils.getShortName(array.getClass().getComponentType()) + '>' + '[' + EMPTY + ']';
|
||||
}
|
||||
if (array.length > 0) {
|
||||
result.append(style(array[array.length - 1]));
|
||||
|
||||
StringJoiner result = new StringJoiner(", ", "[", "]");
|
||||
for (Object o : array) {
|
||||
result.add(style(o));
|
||||
}
|
||||
else {
|
||||
result.append(EMPTY);
|
||||
}
|
||||
result.append("]");
|
||||
return result.toString();
|
||||
return ARRAY + '<' + ClassUtils.getShortName(array.getClass().getComponentType()) + '>' + result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -734,19 +734,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(array[i]);
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (boolean b : array) {
|
||||
sj.add(String.valueOf(b));
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -766,18 +758,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(array[i]);
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (byte b : array) {
|
||||
sj.add(String.valueOf(b));
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -797,18 +782,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("'").append(array[i]).append("'");
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (char c : array) {
|
||||
sj.add('\'' + String.valueOf(c) + '\'');
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -828,19 +806,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(array[i]);
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (double d : array) {
|
||||
sj.add(String.valueOf(d));
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -860,19 +830,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(array[i]);
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (float f : array) {
|
||||
sj.add(String.valueOf(f));
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -892,18 +854,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(array[i]);
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (int i : array) {
|
||||
sj.add(String.valueOf(i));
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -923,18 +878,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(array[i]);
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (long l : array) {
|
||||
sj.add(String.valueOf(l));
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -954,18 +902,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(array[i]);
|
||||
StringJoiner sj = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
|
||||
for (short s : array) {
|
||||
sj.add(String.valueOf(s));
|
||||
}
|
||||
sb.append(ARRAY_END);
|
||||
return sb.toString();
|
||||
return sj.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,99 @@
|
|||
package org.springframework.core.style;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class DefaultValueStylerTest {
|
||||
|
||||
private DefaultValueStyler styler = new DefaultValueStyler();
|
||||
|
||||
@Test
|
||||
public void style() throws NoSuchMethodException {
|
||||
assertThat(styler.style(null)).isEqualTo("[null]");
|
||||
|
||||
assertThat(styler.style("str")).isEqualTo("'str'");
|
||||
|
||||
assertThat(styler.style(String.class)).isEqualTo("String");
|
||||
|
||||
assertThat(styler.style(String.class.getMethod("toString"))).isEqualTo("toString@String");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void style_plainObject() {
|
||||
final Object obj = new Object();
|
||||
|
||||
assertThat(styler.style(obj)).isEqualTo(String.valueOf(obj));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void style_map() {
|
||||
Map<String, Integer> map = Collections.emptyMap();
|
||||
assertThat(styler.style(map)).isEqualTo("map[[empty]]");
|
||||
|
||||
map = Collections.singletonMap("key", 1);
|
||||
assertThat(styler.style(map)).isEqualTo("map['key' -> 1]");
|
||||
|
||||
map = new HashMap<>();
|
||||
map.put("key1", 1);
|
||||
map.put("key2", 2);
|
||||
assertThat(styler.style(map)).isEqualTo("map['key1' -> 1, 'key2' -> 2]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void style_entry() {
|
||||
final Map<String, Integer> map = new LinkedHashMap<>();
|
||||
map.put("key1", 1);
|
||||
map.put("key2", 2);
|
||||
|
||||
final Iterator<Map.Entry<String, Integer>> entries = map.entrySet().iterator();
|
||||
|
||||
assertThat(styler.style(entries.next())).isEqualTo("'key1' -> 1");
|
||||
assertThat(styler.style(entries.next())).isEqualTo("'key2' -> 2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void style_collection() {
|
||||
List<Integer> list = Collections.emptyList();
|
||||
assertThat(styler.style(list)).isEqualTo("list[[empty]]");
|
||||
|
||||
list = Collections.singletonList(1);
|
||||
assertThat(styler.style(list)).isEqualTo("list[1]");
|
||||
|
||||
list = Arrays.asList(1, 2);
|
||||
assertThat(styler.style(list)).isEqualTo("list[1, 2]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void style_primitiveArray() {
|
||||
int[] array = new int[0];
|
||||
assertThat(styler.style(array)).isEqualTo("array<Object>[[empty]]");
|
||||
|
||||
array = new int[]{1};
|
||||
assertThat(styler.style(array)).isEqualTo("array<Integer>[1]");
|
||||
|
||||
array = new int[]{1, 2};
|
||||
assertThat(styler.style(array)).isEqualTo("array<Integer>[1, 2]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void style_objectArray() {
|
||||
String[] array = new String[0];
|
||||
assertThat(styler.style(array)).isEqualTo("array<String>[[empty]]");
|
||||
|
||||
array = new String[]{"str1"};
|
||||
assertThat(styler.style(array)).isEqualTo("array<String>['str1']");
|
||||
|
||||
array = new String[]{"str1", "str2"};
|
||||
assertThat(styler.style(array)).isEqualTo("array<String>['str1', 'str2']");
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue