Ver código fonte

新增字符串处理工具方法

woody 2 anos atrás
pai
commit
61f51ab043

+ 44 - 1
framework-base/src/main/java/com/chelvc/framework/base/util/StringUtils.java

@@ -10,6 +10,7 @@ import java.util.concurrent.ThreadLocalRandom;
 import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.function.Supplier;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -196,7 +197,49 @@ public final class StringUtils {
      * @return 非空字符串
      */
     public static <T extends CharSequence> T ifEmpty(T first, T second) {
-        return first == null || first.length() == 0 ? second : first;
+        return isEmpty(first) ? second : first;
+    }
+
+    /**
+     * 如果原始字符串不为空,则对原始字符串做对象适配
+     *
+     * @param original 原始字符串
+     * @param adapter  对象适配函数
+     * @param <T>      原始字符串类型
+     * @param <R>      适配目标对象类型
+     * @return 适配目标对象实例
+     */
+    public static <T extends CharSequence, R> R ifEmpty(T original, @NonNull Function<T, R> adapter) {
+        return isEmpty(original) ? null : adapter.apply(original);
+    }
+
+    /**
+     * 如果原始字符串不为空,则对原始字符串做对象适配,如果目标适配对象为空则返回默认值
+     *
+     * @param original 原始字符串
+     * @param adapter  对象适配函数
+     * @param <T>      原始字符串类型
+     * @param <R>      适配目标对象类型
+     * @return 适配目标对象实例
+     */
+    public static <T extends CharSequence, R> R ifEmpty(T original, @NonNull Function<T, R> adapter, R defaultValue) {
+        R value = ifEmpty(original, adapter);
+        return isEmpty(value) ? defaultValue : value;
+    }
+
+    /**
+     * 如果原始字符串不为空,则对原始字符串做对象适配,如果目标适配对象为空则返回默认值
+     *
+     * @param original 原始字符串
+     * @param adapter  对象适配函数
+     * @param <T>      原始字符串类型
+     * @param <R>      适配目标对象类型
+     * @return 适配目标对象实例
+     */
+    public static <T extends CharSequence, R> R ifEmpty(T original, @NonNull Function<T, R> adapter,
+                                                        @NonNull Supplier<R> defaulter) {
+        R value = ifEmpty(original, adapter);
+        return isEmpty(value) ? defaulter.get() : value;
     }
 
     /**