|
@@ -19,7 +19,6 @@ import java.time.temporal.TemporalAccessor;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Locale;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
public interface DateFormatter {
|
|
|
|
|
@@ -114,14 +113,17 @@ public interface DateFormatter {
|
|
|
input = input.substring(1);
|
|
|
}
|
|
|
|
|
|
- List<String> patterns = splitCombinedPatterns(input);
|
|
|
- List<DateFormatter> formatters = patterns.stream().map(p -> {
|
|
|
+ // forPattern can be hot (e.g. executing a date processor on each document in a 1000 document bulk index request),
|
|
|
+ // so this is a for each loop instead of the equivalent stream pipeline
|
|
|
+ String[] patterns = splitCombinedPatterns(input);
|
|
|
+ List<DateFormatter> formatters = new ArrayList<>(patterns.length);
|
|
|
+ for (String pattern : patterns) {
|
|
|
// make sure we still support camel case for indices created before 8.0
|
|
|
if (supportedVersion.before(Version.V_8_0_0)) {
|
|
|
- return LegacyFormatNames.camelCaseToSnakeCase(p);
|
|
|
+ pattern = LegacyFormatNames.camelCaseToSnakeCase(pattern);
|
|
|
}
|
|
|
- return p;
|
|
|
- }).map(DateFormatters::forPattern).collect(Collectors.toList());
|
|
|
+ formatters.add(DateFormatters.forPattern(pattern));
|
|
|
+ }
|
|
|
|
|
|
if (formatters.size() == 1) {
|
|
|
return formatters.get(0);
|
|
@@ -130,13 +132,12 @@ public interface DateFormatter {
|
|
|
return JavaDateFormatter.combined(input, formatters);
|
|
|
}
|
|
|
|
|
|
- static List<String> splitCombinedPatterns(String input) {
|
|
|
- List<String> patterns = new ArrayList<>();
|
|
|
- for (String pattern : Strings.delimitedListToStringArray(input, "||")) {
|
|
|
+ static String[] splitCombinedPatterns(String input) {
|
|
|
+ String[] patterns = Strings.delimitedListToStringArray(input, "||");
|
|
|
+ for (String pattern : patterns) {
|
|
|
if (Strings.hasLength(pattern) == false) {
|
|
|
throw new IllegalArgumentException("Cannot have empty element in multi date format pattern: " + input);
|
|
|
}
|
|
|
- patterns.add(pattern);
|
|
|
}
|
|
|
return patterns;
|
|
|
}
|