update StrFormatter;

This commit is contained in:
emptypoint 2023-05-10 22:33:08 +08:00
parent ffe5a08628
commit deef532eb4

View File

@ -13,8 +13,11 @@
package org.dromara.hutool.core.text.placeholder; package org.dromara.hutool.core.text.placeholder;
import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.map.WeakConcurrentMap;
import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.text.placeholder.template.NamedPlaceholderStrTemplate; import org.dromara.hutool.core.text.placeholder.template.NamedPlaceholderStrTemplate;
import org.dromara.hutool.core.text.placeholder.template.SinglePlaceholderStrTemplate;
import java.util.Map; import java.util.Map;
@ -24,6 +27,7 @@ import java.util.Map;
* @author Looly * @author Looly
*/ */
public class StrFormatter { public class StrFormatter {
private static final WeakConcurrentMap<Map.Entry<CharSequence, Object>, StrTemplate> CACHE = new WeakConcurrentMap<>();
/** /**
* 格式化字符串<br> * 格式化字符串<br>
@ -61,9 +65,8 @@ public class StrFormatter {
if (StrUtil.isBlank(strPattern) || StrUtil.isBlank(placeHolder) || ArrayUtil.isEmpty(argArray)) { if (StrUtil.isBlank(strPattern) || StrUtil.isBlank(placeHolder) || ArrayUtil.isEmpty(argArray)) {
return strPattern; return strPattern;
} }
return StrTemplate.of(strPattern) return ((SinglePlaceholderStrTemplate) CACHE.computeIfAbsent(MutableEntry.of(strPattern, placeHolder), k ->
.placeholder(placeHolder) StrTemplate.of(strPattern).placeholder(placeHolder).build()))
.build()
.format(argArray); .format(argArray);
} }
@ -85,12 +88,21 @@ public class StrFormatter {
return template.toString(); return template.toString();
} }
return ((NamedPlaceholderStrTemplate) CACHE.computeIfAbsent(MutableEntry.of(template, ignoreNull), k -> {
final NamedPlaceholderStrTemplate.Builder builder = StrTemplate.ofNamed(template.toString()); final NamedPlaceholderStrTemplate.Builder builder = StrTemplate.ofNamed(template.toString());
if (ignoreNull) { if (ignoreNull) {
builder.addFeatures(StrTemplate.Feature.FORMAT_NULL_VALUE_TO_WHOLE_PLACEHOLDER); builder.addFeatures(StrTemplate.Feature.FORMAT_NULL_VALUE_TO_WHOLE_PLACEHOLDER);
} else { } else {
builder.addFeatures(StrTemplate.Feature.FORMAT_NULL_VALUE_TO_EMPTY); builder.addFeatures(StrTemplate.Feature.FORMAT_NULL_VALUE_TO_EMPTY);
} }
return builder.build().format(map); return builder.build();
})).format(map);
}
/**
* 清空缓存
*/
public static void clear() {
CACHE.clear();
} }
} }