diff --git a/stream-core/src/main/java/org/dromara/streamquery/stream/core/optional/Opp.java b/stream-core/src/main/java/org/dromara/streamquery/stream/core/optional/Opp.java index 6b2e935a26a22e71510abf348aed192e41d38ac3..97789a9d6eb81e8fa12b572dc02ff5f29f83f257 100644 --- a/stream-core/src/main/java/org/dromara/streamquery/stream/core/optional/Opp.java +++ b/stream-core/src/main/java/org/dromara/streamquery/stream/core/optional/Opp.java @@ -361,6 +361,16 @@ public class Opp { } } + /** + * 如果包裹里的值存在,则返回该值,如果不存在返回默认的值 + * @param f 存在时执行的操作 + * @param supplier 如果不存在则返回的默认值 + * @return 如果包裹里的值存在,则返回该值,如果不存在返回默认的值 + */ + public U fold( Function f, Supplier supplier) { + return this.map(f).orElseGet(supplier); + } + /** * 如果包裹里元素的值存在,就执行对应的操作,并返回本身 如果不存在,返回一个空的{@code Opp} * diff --git a/stream-core/src/test/java/org/dromara/streamquery/stream/core/optional/OppTest.java b/stream-core/src/test/java/org/dromara/streamquery/stream/core/optional/OppTest.java index cd64797225b0f1a8ec357626934f68e01a8a0d96..8c91c48177084fc0be3e80d37863b9d9a75e376a 100644 --- a/stream-core/src/test/java/org/dromara/streamquery/stream/core/optional/OppTest.java +++ b/stream-core/src/test/java/org/dromara/streamquery/stream/core/optional/OppTest.java @@ -62,6 +62,13 @@ class OppTest { Assertions.assertTrue(isEmpty); } + @Test + void foldTest() { + final Opp opp = Opp.ofStr(" "); + final String fold = opp.fold(String::toUpperCase, () -> "hutool"); + Assertions.assertEquals("hutool", fold); + } + @Test void peekTest() { final User user = new User();