Skip to content

Commit 716ed06

Browse files
committed
Collect Fragments and Parameters as we go
1 parent 59599cf commit 716ed06

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/main/java/org/mybatis/dynamic/sql/util/FragmentCollector.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616
package org.mybatis.dynamic.sql.util;
1717

1818
import java.util.ArrayList;
19+
import java.util.Collections;
1920
import java.util.HashMap;
2021
import java.util.List;
2122
import java.util.Map;
2223
import java.util.Optional;
2324
import java.util.stream.Collector;
2425

2526
public class FragmentCollector {
26-
final List<FragmentAndParameters> fragments = new ArrayList<>();
27+
final List<String> fragments = new ArrayList<>();
28+
final Map<String, Object> parameters = new HashMap<>();
2729

2830
public FragmentCollector() {
2931
super();
@@ -34,20 +36,22 @@ private FragmentCollector(FragmentAndParameters initialFragment) {
3436
}
3537

3638
public void add(FragmentAndParameters fragmentAndParameters) {
37-
fragments.add(fragmentAndParameters);
39+
fragments.add(fragmentAndParameters.fragment());
40+
parameters.putAll(fragmentAndParameters.parameters());
3841
}
3942

4043
public FragmentCollector merge(FragmentCollector other) {
4144
fragments.addAll(other.fragments);
45+
parameters.putAll(other.parameters);
4246
return this;
4347
}
4448

4549
public Optional<String> firstFragment() {
46-
return fragments.stream().findFirst().map(FragmentAndParameters::fragment);
50+
return fragments.stream().findFirst();
4751
}
4852

4953
public String collectFragments(Collector<CharSequence, ?, String> fragmentCollector) {
50-
return fragments.stream().map(FragmentAndParameters::fragment).collect(fragmentCollector);
54+
return fragments.stream().collect(fragmentCollector);
5155
}
5256

5357
public FragmentAndParameters toFragmentAndParameters(Collector<CharSequence, ?, String> fragmentCollector) {
@@ -57,9 +61,7 @@ public FragmentAndParameters toFragmentAndParameters(Collector<CharSequence, ?,
5761
}
5862

5963
public Map<String, Object> parameters() {
60-
return fragments.stream()
61-
.map(FragmentAndParameters::parameters)
62-
.collect(HashMap::new, HashMap::putAll, HashMap::putAll);
64+
return Collections.unmodifiableMap(parameters);
6365
}
6466

6567
public boolean hasMultipleFragments() {

0 commit comments

Comments
 (0)