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 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