Skip to content
This repository was archived by the owner on Oct 31, 2024. It is now read-only.

Commit b9bbf68

Browse files
authored
Merge pull request #52 from gatling/stringbuilder
Optimize StringBuilder based loops
2 parents 8f007ca + 58e6c1a commit b9bbf68

File tree

7 files changed

+33
-48
lines changed

7 files changed

+33
-48
lines changed

jmespath-core/src/main/java/io/burt/jmespath/node/CreateArrayNode.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.List;
44
import java.util.ArrayList;
5-
import java.util.Iterator;
65

76
import io.burt.jmespath.Adapter;
87
import io.burt.jmespath.Expression;
@@ -21,7 +20,7 @@ public T search(T input) {
2120
if (runtime.typeOf(input) == JmesPathType.NULL) {
2221
return input;
2322
} else {
24-
List<T> array = new ArrayList<>();
23+
List<T> array = new ArrayList<>(entries.size());
2524
for (Expression<T> entry : entries) {
2625
array.add(entry.search(input));
2726
}
@@ -31,17 +30,15 @@ public T search(T input) {
3130

3231
@Override
3332
protected String internalToString() {
33+
if (entries.isEmpty()) {
34+
return "[]";
35+
}
3436
StringBuilder str = new StringBuilder("[");
35-
Iterator<Expression<T>> entryIterator = entries.iterator();
36-
while (entryIterator.hasNext()) {
37-
Expression<T> entry = entryIterator.next();
38-
str.append(entry);
39-
if (entryIterator.hasNext()) {
40-
str.append(", ");
41-
}
37+
for (Expression<T> entry : entries) {
38+
str.append(entry).append(", ");
4239
}
43-
str.append(']');
44-
return str.toString();
40+
str.setLength(str.length() - 2);
41+
return str.append(']').toString();
4542
}
4643

4744
@Override

jmespath-core/src/main/java/io/burt/jmespath/node/CreateObjectNode.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.util.Map;
44
import java.util.LinkedHashMap;
55
import java.util.List;
6-
import java.util.Iterator;
76

87
import io.burt.jmespath.Adapter;
98
import io.burt.jmespath.Expression;
@@ -70,17 +69,15 @@ public T search(T input) {
7069

7170
@Override
7271
protected String internalToString() {
72+
if (entries.isEmpty()) {
73+
return "{}";
74+
}
7375
StringBuilder str = new StringBuilder("{");
74-
Iterator<Entry<T>> entryIterator = entries.iterator();
75-
while (entryIterator.hasNext()) {
76-
Entry<T> entry = entryIterator.next();
77-
str.append(entry.key()).append('=').append(entry.value());
78-
if (entryIterator.hasNext()) {
79-
str.append(", ");
80-
}
76+
for (Entry<T> entry : entries) {
77+
str.append(entry.key()).append('=').append(entry.value()).append(", ");
8178
}
82-
str.append('}');
83-
return str.toString();
79+
str.setLength(str.length() - 2);
80+
return str.append('}').toString();
8481
}
8582

8683
@Override

jmespath-core/src/main/java/io/burt/jmespath/node/FunctionCallNode.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.List;
44
import java.util.ArrayList;
5-
import java.util.Iterator;
65

76
import io.burt.jmespath.Adapter;
87
import io.burt.jmespath.Expression;
@@ -39,16 +38,13 @@ protected String internalToString() {
3938
str.append(implementation.name());
4039
}
4140
str.append(", [");
42-
Iterator<Expression<T>> argIterator = args.iterator();
43-
while (argIterator.hasNext()) {
44-
Expression<T> arg = argIterator.next();
45-
str.append(arg);
46-
if (argIterator.hasNext()) {
47-
str.append(", ");
48-
}
41+
for (Expression<T> arg : args) {
42+
str.append(arg).append(", ");
43+
}
44+
if (!args.isEmpty()) {
45+
str.setLength(str.length() - 2);
4946
}
50-
str.append(']');
51-
return str.toString();
47+
return str.append(']').toString();
5248
}
5349

5450
@Override

jmespath-core/src/main/java/io/burt/jmespath/node/Node.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public String toString() {
1919
StringBuilder str = new StringBuilder();
2020
String name = getClass().getName();
2121
str.append(name.substring(name.lastIndexOf('.') + 1));
22-
str.delete(str.length() - 4, str.length());
22+
str.setLength(str.length() - 4);
2323
str.append('(');
2424
if (extraArgs != null) {
2525
str.append(extraArgs);

jmespath-core/src/main/java/io/burt/jmespath/node/OperatorNode.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.Arrays;
44
import java.util.List;
5-
import java.util.Iterator;
65

76
import io.burt.jmespath.Adapter;
87
import io.burt.jmespath.Expression;
@@ -22,15 +21,14 @@ protected Expression<T> operand(int index) {
2221

2322
@Override
2423
protected String internalToString() {
24+
if (operands.isEmpty()) {
25+
return "";
26+
}
2527
StringBuilder operandsString = new StringBuilder();
26-
Iterator<Expression<T>> operandIterator = operands.iterator();
27-
while (operandIterator.hasNext()) {
28-
Expression<T> operand = operandIterator.next();
29-
operandsString.append(operand);
30-
if (operandIterator.hasNext()) {
31-
operandsString.append(", ");
32-
}
28+
for (Expression<T> operand : operands) {
29+
operandsString.append(operand).append(", ");
3330
}
31+
operandsString.setLength(operandsString.length() - 2);
3432
return operandsString.toString();
3533
}
3634

jmespath-core/src/main/java/io/burt/jmespath/node/SequenceNode.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.burt.jmespath.node;
22

3-
import java.util.Iterator;
43
import java.util.List;
54

65
import io.burt.jmespath.Adapter;
@@ -19,12 +18,10 @@ protected String internalToString() {
1918
return null;
2019
} else {
2120
StringBuilder buffer = new StringBuilder();
22-
Iterator<Node<T>> iterator = nodes.iterator();
23-
buffer.append(iterator.next());
24-
while (iterator.hasNext()) {
25-
buffer.append(", ");
26-
buffer.append(iterator.next());
21+
for (Node<T> node : nodes) {
22+
buffer.append(node).append(", ");
2723
}
24+
buffer.setLength(buffer.length() - 2);
2825
return buffer.toString();
2926
}
3027
}

jmespath-core/src/main/java/io/burt/jmespath/parser/ParseException.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public ParseException(String query, Iterable<ParseError> errors) {
1616
private static String joinMessages(Iterable<ParseError> errors) {
1717
StringBuilder s = new StringBuilder();
1818
for (ParseError e : errors) {
19-
s.append(String.format(", %s at position %d", e.message(), e.position()));
19+
s.append(String.format("%s at position %d, ", e.message(), e.position()));
2020
}
21-
s.delete(0, 2);
21+
s.setLength(s.length() - 2);
2222
return s.toString();
2323
}
2424

0 commit comments

Comments
 (0)