From 90772979668cfca8be8dc9c80429b35ee02cd01d Mon Sep 17 00:00:00 2001 From: huangchengxing <841396397@qq.com> Date: Tue, 30 Aug 2022 16:45:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86defaultIfNull=E6=A3=80=E9=AA=8C?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B=E6=94=B9=E4=B8=BA=E6=B3=9B?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E5=B9=B6=E8=A1=A5=E5=85=85=E9=87=8D=E8=BD=BD?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/util/ObjUtil.java | 26 ++++++++++++++----- .../java/cn/hutool/core/util/ObjUtilTest.java | 25 ++++++++++-------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java index c193bd571..18bbdc7f6 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java @@ -13,11 +13,7 @@ import cn.hutool.core.text.StrUtil; import java.lang.reflect.Array; import java.math.BigDecimal; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Function; import java.util.function.Supplier; @@ -301,6 +297,7 @@ public class ObjUtil { /** * 如果给定对象为{@code null} 返回默认值, 如果不为null 返回自定义handle处理后的返回值 * + * @param 返回值类型 * @param 被检查对象类型 * @param source Object 类型对象 * @param handler 非空时自定义的处理方法 @@ -308,13 +305,30 @@ public class ObjUtil { * @return 处理后的返回值 * @since 6.0.0 */ - public static T defaultIfNull(final Object source, final Function handler, final Supplier defaultSupplier) { + public static R defaultIfNull( + final T source, final Function handler, final Supplier defaultSupplier) { if (isNotNull(source)) { return handler.apply(source); } return defaultSupplier.get(); } + /** + * 如果给定对象为{@code null}返回默认值, 如果不为null返回自定义handle处理后的返回值 + * + * @param 返回值类型 + * @param 被检查对象类型 + * @param source Object 类型对象 + * @param handler 非空时自定义的处理方法 + * @param defaultValue 默认为空的返回值 + * @return 处理后的返回值 + * @since 6.0.0 + */ + public static R defaultIfNull( + final T source, final Function handler, final R defaultValue) { + return isNull(source) ? defaultValue : handler.apply(source); + } + /** * 克隆对象
* 如果对象实现Cloneable接口,调用其clone方法
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java index a2b34c992..2b41568ba 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java @@ -1,18 +1,16 @@ package cn.hutool.core.util; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.exceptions.CloneRuntimeException; import org.junit.Assert; import org.junit.Test; import java.math.BigDecimal; -import java.time.Instant; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; public class ObjUtilTest { @@ -99,15 +97,20 @@ public class ObjUtilTest { @Test public void defaultIfNullTest() { - final String dateStr = "2020-10-23 15:12:30"; - final Instant result1 = ObjUtil.defaultIfNull(dateStr, - (v) -> DateUtil.parse(v.toString(), DatePattern.NORM_DATETIME_PATTERN).toInstant(), Instant::now); - Assert.assertNotNull(result1); + final Object val1 = new Object(); + final Object val2 = new Object(); - final String nullValue = null; - final Instant result2 = ObjUtil.defaultIfNull(nullValue, - (v) -> DateUtil.parse(v.toString(), DatePattern.NORM_DATETIME_PATTERN).toInstant(), Instant::now); - Assert.assertNotNull(result2); + Assert.assertSame(val1, ObjUtil.defaultIfNull(val1, () -> val2)); + Assert.assertSame(val2, ObjUtil.defaultIfNull(null, () -> val2)); + + Assert.assertSame(val1, ObjUtil.defaultIfNull(val1, val2)); + Assert.assertSame(val2, ObjUtil.defaultIfNull(null, val2)); + + Assert.assertSame(val1, ObjUtil.defaultIfNull(val1, Function.identity(), () -> val2)); + Assert.assertSame(val2, ObjUtil.defaultIfNull(null, Function.identity(), () -> val2)); + + Assert.assertSame(val1, ObjUtil.defaultIfNull(val1, Function.identity(), val2)); + Assert.assertSame(val2, ObjUtil.defaultIfNull(null, Function.identity(), val2)); } @Test