From ca981f2d2701aaaf3b5f6a2152619568f3cacbc6 Mon Sep 17 00:00:00 2001
From: duandazhi
Date: Fri, 26 Aug 2022 17:20:34 +0800
Subject: [PATCH] =?UTF-8?q?Opt=E5=A2=9E=E5=8A=A0=EF=BC=9AifPresent?=
=?UTF-8?q?=EF=BC=88fun,=20default=EF=BC=89=E6=96=B9=E6=B3=95=EF=BC=8C?=
=?UTF-8?q?=E9=9D=9E=E5=B8=B8=E9=AB=98=E9=A2=91=E7=9A=84=E6=96=B9=E6=B3=95?=
=?UTF-8?q?=EF=BC=8C=E8=A6=81=E5=A4=9A=E8=B0=A2=E4=B8=80=E4=B8=AAorElse?=
=?UTF-8?q?=E6=98=AF=E5=9C=A8=E4=B8=8D=E4=BC=98=E9=9B=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/cn/hutool/core/lang/Opt.java | 24 +++++++++++++++++++
.../java/cn/hutool/core/lang/OptTest.java | 14 +++++++++++
2 files changed, 38 insertions(+)
diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java b/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java
index 6a349256e3..6af6f9a24b 100644
--- a/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java
@@ -229,6 +229,30 @@ public class Opt {
return this;
}
+ /**
+ * 如果包裹里的值存在,就执行传入的操作, 如果不存在直接给一个默认值({@link Function#apply(Object)})
+ *
+ *
+ * 作用:简化api,如此高频api ifPresent没有返回、没有默认值用起来不方便,
+ * 设置默认还得写ifPresent OrElse ({@link Optional#orElse(Object)})
+ *
{@code Opt.ofNullable(xxxObj).ifPresent(xxxObj::yyMethod, DEFAULT_ZZZ)}
+ *
+ *
+ * @param mapper 值存在时执行的操作
+ * @param defaultValue 值不存在时的默认值
+ * @param 操作返回值的类型
+ * @return 返回包裹类型的Opt
+ * @throws NullPointerException 如果给定的mapper操作为 {@code null},抛出 {@code NPE}
+ */
+ public Opt ifPresent(Function super T, ? extends U> mapper, T defaultValue) {
+ Objects.requireNonNull(mapper);
+ if (isPresent()) {
+ return Opt.ofNullable(mapper.apply(value));
+ } else {
+ return Opt.ofNullable(mapper.apply(defaultValue));
+ }
+ }
+
/**
* 判断包裹里的值存在并且与给定的条件是否满足 ({@link Predicate#test}执行结果是否为true)
* 如果满足条件则返回本身
diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/OptTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/OptTest.java
index f1542d46a0..be859d36d0 100644
--- a/hutool-core/src/test/java/cn/hutool/core/lang/OptTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/lang/OptTest.java
@@ -31,6 +31,15 @@ public class OptTest {
Assert.assertEquals("hutool", hutool);
}
+ @Test
+ public void ifPresentAndDefaultTest() {
+ String username = null;
+ final User user = new User();
+ // 相当于ifPresent的链式调用
+ Opt opt = Opt.ofNullable(username).ifPresent(user::name, "hutool");
+ Assert.assertEquals("hutool", opt.get().getUsername());
+ }
+
@Test
public void getTest() {
// 和原版Optional有区别的是,get不会抛出NoSuchElementException
@@ -199,5 +208,10 @@ public class OptTest {
static class User {
private String username;
private String nickname;
+
+ public User name(String username) {
+ this.username = username;
+ return this;
+ }
}
}
--
Gitee