add methods

This commit is contained in:
Looly 2024-07-13 17:28:39 +08:00
parent b30bf90210
commit b9c7b5f4bf
2 changed files with 117 additions and 42 deletions

View File

@ -30,6 +30,7 @@ import org.dromara.hutool.core.text.replacer.SearchReplacer;
import org.dromara.hutool.core.text.split.SplitUtil;
import org.dromara.hutool.core.util.ByteUtil;
import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.core.util.ObjUtil;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
@ -100,8 +101,8 @@ public class CharSequenceUtil extends StrValidator {
*
* @param obj 对象
* @return 字符串
* @since 4.1.3
* @see String#valueOf(Object)
* @since 4.1.3
*/
public static String toString(final Object obj) {
return String.valueOf(obj);
@ -133,6 +134,19 @@ public class CharSequenceUtil extends StrValidator {
// endregion
// region ----- defaultIf
/**
* 当给定字符串为空字符串时转换为""<br>
* 此方法与{@link #toStringOrEmpty(Object)}不同的是如果提供的{@link CharSequence}非String则保持原状
*
* @param str 被转换的字符串
* @return 转换后的字符串
* @see #toStringOrEmpty(Object)
*/
public static CharSequence emptyIfNull(final CharSequence str) {
return null == str ? EMPTY : str;
}
/**
* 当给定字符串为空字符串时转换为{@code null}
*
@ -144,6 +158,54 @@ public class CharSequenceUtil extends StrValidator {
return isEmpty(str) ? null : str;
}
/**
* <p>如果给定字符串为{@code null}返回默认值
* <pre>{@code
* defaultIfNull(null, null); // = null
* defaultIfNull(null, ""); // = ""
* defaultIfNull(null, "zz"); // = "zz"
* defaultIfNull("abc", *); // = "abc"
* }</pre>
*
* @param <T> 字符串类型
* @param str 被检查字符串可能为{@code null}
* @param defaultValue 被检查字符串为{@code null}返回的默认值可以为{@code null}
* @return 被检查字符串不为 {@code null} 返回原值否则返回默认值
* @see ObjUtil#defaultIfNull(Object, Object)
*/
public static <T extends CharSequence> T defaultIfNull(final T str, final T defaultValue) {
return ObjUtil.defaultIfNull(str, defaultValue);
}
/**
* 如果给定字符串不为{@code null} 返回原值, 否则返回 {@link Supplier#get()} 提供的默认值
*
* @param <T> 被检查字符串类型
* @param source 被检查字符串可能为{@code null}
* @param defaultSupplier 为空时的默认值提供者
* @return 被检查字符串不为 {@code null} 返回原值否则返回 {@link Supplier#get()} 提供的默认值
* @see ObjUtil#defaultIfNull(Object, Supplier)
*/
public static <T extends CharSequence> T defaultIfNull(final T source, final Supplier<? extends T> defaultSupplier) {
return ObjUtil.defaultIfNull(source, defaultSupplier);
}
/**
* 如果给定字符串不为{@code null} 返回自定义handler处理后的结果否则返回 {@link Supplier#get()} 提供的默认值
*
* @param <R> 返回值类型
* @param <T> 被检查对象类型
* @param source 被检查对象可能为{@code null}
* @param handler 非空时自定义的处理方法
* @param defaultSupplier 为空时的默认值提供者
* @return 被检查对象不为 {@code null} 返回处理后的结果否则返回 {@link Supplier#get()} 提供的默认值
* @since 6.0.0
* @see ObjUtil#defaultIfNull(Object, Function, Supplier)
*/
public static <T extends CharSequence, R> R defaultIfNull(final T source, final Function<? super T, ? extends R> handler, final Supplier<? extends R> defaultSupplier) {
return ObjUtil.defaultIfNull(source, handler, defaultSupplier);
}
/**
* 如果给定对象为{@code null}或者 "" 返回默认值
*
@ -165,6 +227,18 @@ public class CharSequenceUtil extends StrValidator {
return isEmpty(str) ? defaultValue : str;
}
/**
* 如果给定对象为{@code null}或者{@code ""}返回原值, 否则返回自定义handler处理后的返回值
*
* @param <T> 被检查对象类型
* @param str String 类型
* @param defaultSupplier empty时的处理方法
* @return 处理后的返回值
*/
public static <T extends CharSequence> T defaultIfEmpty(final T str, final Supplier<? extends T> defaultSupplier) {
return isEmpty(str) ? defaultSupplier.get() : str;
}
/**
* 如果给定对象为{@code null}或者{@code ""}返回defaultHandler处理的结果, 否则返回自定义handler处理后的返回值
*
@ -176,10 +250,7 @@ public class CharSequenceUtil extends StrValidator {
* @return 处理后的返回值
*/
public static <T extends CharSequence, V> V defaultIfEmpty(final T str, final Function<T, V> handler, final Supplier<? extends V> defaultSupplier) {
if (isNotEmpty(str)) {
return handler.apply(str);
}
return defaultSupplier.get();
return isEmpty(str) ? defaultSupplier.get() : handler.apply(str);
}
/**
@ -203,6 +274,18 @@ public class CharSequenceUtil extends StrValidator {
return isBlank(str) ? defaultValue : str;
}
/**
* 如果给定对象为{@code null}或者{@code ""}返回原值, 否则返回自定义handler处理后的返回值
*
* @param <T> 被检查对象类型
* @param str String 类型
* @param defaultSupplier empty时的处理方法
* @return 处理后的返回值
*/
public static <T extends CharSequence> T defaultIfBlank(final T str, final Supplier<? extends T> defaultSupplier) {
return isBlank(str) ? defaultSupplier.get() : str;
}
/**
* 如果被检查对象为 {@code null} "" 空白字符串时返回默认值 defaultValueSupplier 提供否则直接返回
*
@ -216,10 +299,7 @@ public class CharSequenceUtil extends StrValidator {
* @since 5.7.20
*/
public static <T extends CharSequence, V> V defaultIfBlank(final T str, final Function<T, V> handler, final Supplier<? extends V> defaultSupplier) {
if (isBlank(str)) {
return defaultSupplier.get();
}
return handler.apply(str);
return isBlank(str) ? defaultSupplier.get() : handler.apply(str);
}
// endregion

View File

@ -278,11 +278,11 @@ public class ObjUtil {
/**
* <p>如果给定对象为{@code null}返回默认值
* <pre>{@code
* ObjectUtil.defaultIfNull(null, null); // = null
* ObjectUtil.defaultIfNull(null, ""); // = ""
* ObjectUtil.defaultIfNull(null, "zz"); // = "zz"
* ObjectUtil.defaultIfNull("abc", *); // = "abc"
* ObjectUtil.defaultIfNull(Boolean.TRUE, *); // = Boolean.TRUE
* ObjUtil.defaultIfNull(null, null); // = null
* ObjUtil.defaultIfNull(null, ""); // = ""
* ObjUtil.defaultIfNull(null, "zz"); // = "zz"
* ObjUtil.defaultIfNull("abc", *); // = "abc"
* ObjUtil.defaultIfNull(Boolean.TRUE, *); // = Boolean.TRUE
* }</pre>
*
* @param <T> 对象类型
@ -299,16 +299,29 @@ public class ObjUtil {
* 如果给定对象不为{@code null} 返回原值, 否则返回 {@link Supplier#get()} 提供的默认值
*
* @param <T> 被检查对象类型
* @param source 被检查对象可能为{@code null}
* @param object 被检查对象可能为{@code null}
* @param defaultSupplier 为空时的默认值提供者
* @return 被检查对象不为 {@code null} 返回原值否则返回 {@link Supplier#get()} 提供的默认值
* @since 5.4.6
*/
public static <T> T defaultIfNull(final T source, final Supplier<? extends T> defaultSupplier) {
if (isNotNull(source)) {
return source;
}
return defaultSupplier.get();
public static <T> T defaultIfNull(final T object, final Supplier<? extends T> defaultSupplier) {
return isNull(object) ? defaultSupplier.get() : object;
}
/**
* 如果给定对象不为{@code null} 返回自定义handler处理后的结果否则返回默认值
*
* @param <R> 返回值类型
* @param <T> 被检查对象类型
* @param object 被检查对象可能为{@code null}
* @param handler 非空时自定义的处理方法
* @param defaultValue 为空时的默认返回值
* @return 被检查对象不为 {@code null} 返回处理后的结果否则返回默认值
* @since 6.0.0
*/
public static <T, R> R defaultIfNull(final T object,
final Function<? super T, ? extends R> handler, final R defaultValue) {
return isNull(object) ? defaultValue : handler.apply(object);
}
/**
@ -316,17 +329,15 @@ public class ObjUtil {
*
* @param <R> 返回值类型
* @param <T> 被检查对象类型
* @param source 被检查对象可能为{@code null}
* @param object 被检查对象可能为{@code null}
* @param handler 非空时自定义的处理方法
* @param defaultSupplier 为空时的默认值提供者
* @return 被检查对象不为 {@code null} 返回处理后的结果否则返回 {@link Supplier#get()} 提供的默认值
* @since 6.0.0
*/
public static <T, R> R defaultIfNull(final T source, final Function<? super T, ? extends R> handler, final Supplier<? extends R> defaultSupplier) {
if (isNotNull(source)) {
return handler.apply(source);
}
return defaultSupplier.get();
public static <T, R> R defaultIfNull(final T object,
final Function<? super T, ? extends R> handler, final Supplier<? extends R> defaultSupplier) {
return isNull(object) ? defaultSupplier.get() : handler.apply(object);
}
/**
@ -354,22 +365,6 @@ public class ObjUtil {
consumer.accept(source);
}
}
/**
* 如果给定对象不为{@code null} 返回自定义handler处理后的结果否则返回默认值
*
* @param <R> 返回值类型
* @param <T> 被检查对象类型
* @param source 被检查对象可能为{@code null}
* @param handler 非空时自定义的处理方法
* @param defaultValue 为空时的默认返回值
* @return 被检查对象不为 {@code null} 返回处理后的结果否则返回默认值
* @since 6.0.0
*/
public static <T, R> R defaultIfNull(
final T source, final Function<? super T, ? extends R> handler, final R defaultValue) {
return isNull(source) ? defaultValue : handler.apply(source);
}
// endregion
/**