diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
index eec4d35a8..20a30f66d 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
@@ -14,7 +14,7 @@ package org.dromara.hutool.core.array;
import org.dromara.hutool.core.collection.iter.ArrayIter;
import org.dromara.hutool.core.convert.Convert;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.Validator;
import org.dromara.hutool.core.reflect.ClassUtil;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/ReaderWrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/ReaderWrapper.java
index 0d99e4000..6c3e19d64 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/io/ReaderWrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/ReaderWrapper.java
@@ -13,7 +13,7 @@
package org.dromara.hutool.core.io;
import org.dromara.hutool.core.lang.Assert;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import java.io.IOException;
import java.io.Reader;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWrapper.java
index 1d45f6f9d..2581fe805 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWrapper.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.core.io.file;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.core.util.ObjUtil;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/builder/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/builder/package-info.java
index b032efc4c..2655ddce1 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/builder/package-info.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/builder/package-info.java
@@ -12,7 +12,7 @@
/**
* 建造者工具
- * 用于建造特定对象或结果
+ * 用于建造特定对象或结果,建造者模式的抽象。
*
* @author looly
*
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/func/SimpleWrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/SimpleWrapper.java
similarity index 95%
rename from hutool-core/src/main/java/org/dromara/hutool/core/func/SimpleWrapper.java
rename to hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/SimpleWrapper.java
index ef5d51203..c67ba52e7 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/func/SimpleWrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/SimpleWrapper.java
@@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
-package org.dromara.hutool.core.func;
+package org.dromara.hutool.core.lang.wrapper;
/**
* 简单包装对象
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/func/Wrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/Wrapper.java
similarity index 94%
rename from hutool-core/src/main/java/org/dromara/hutool/core/func/Wrapper.java
rename to hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/Wrapper.java
index 38fa5d2e4..8fdd77dfa 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/func/Wrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/Wrapper.java
@@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
-package org.dromara.hutool.core.func;
+package org.dromara.hutool.core.lang.wrapper;
/**
* 包装接口
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/package-info.java
new file mode 100644
index 000000000..020c3d21b
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/wrapper/package-info.java
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2023. looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * https://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+/**
+ * 提供包装对象的抽象
+ * 通过包装接口,实现装饰模式或代理模式,以增强或目标对象功能。
+ */
+package org.dromara.hutool.core.lang.wrapper;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/LinkedForestMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/LinkedForestMap.java
index fcc2427ea..09d23e17c 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/map/LinkedForestMap.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/LinkedForestMap.java
@@ -15,7 +15,7 @@ package org.dromara.hutool.core.map;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.lang.Assert;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/MapWrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/MapWrapper.java
index f6924729a..6d8779a8c 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/map/MapWrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/MapWrapper.java
@@ -13,7 +13,7 @@
package org.dromara.hutool.core.map;
import org.dromara.hutool.core.lang.Assert;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import org.dromara.hutool.core.util.ObjUtil;
import java.io.IOException;
diff --git a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/CipherWrapper.java b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/CipherWrapper.java
index 9a9cc7131..7a4077932 100644
--- a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/CipherWrapper.java
+++ b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/CipherWrapper.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.crypto;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import javax.crypto.Cipher;
import java.security.InvalidAlgorithmParameterException;
diff --git a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/digest/Digester.java b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/digest/Digester.java
index 739625a38..d17e1a87b 100644
--- a/hutool-crypto/src/main/java/org/dromara/hutool/crypto/digest/Digester.java
+++ b/hutool-crypto/src/main/java/org/dromara/hutool/crypto/digest/Digester.java
@@ -14,7 +14,7 @@ package org.dromara.hutool.crypto.digest;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.codec.HexUtil;
-import org.dromara.hutool.core.func.SimpleWrapper;
+import org.dromara.hutool.core.lang.wrapper.SimpleWrapper;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.io.file.FileUtil;
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverIdentifier.java b/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverIdentifier.java
index 278ce3064..28bbcf86d 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverIdentifier.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/driver/DriverIdentifier.java
@@ -140,13 +140,10 @@ public class DriverIdentifier {
return null;
}
- for (final DriverMatcher driverMatcher : this.matcherList) {
- if (driverMatcher.isMatch(jdbcUrl)) {
- return driverMatcher.getClassName();
- }
- }
-
- return null;
+ return this.matcherList.stream()
+ .filter(driverMatcher -> driverMatcher.test(jdbcUrl))
+ .findFirst()
+ .map(DriverMatcher::getClassName).orElse(null);
}
/**
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/Db2DriverMatcher.java b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/Db2DriverMatcher.java
index 11c19d657..0bad7beab 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/Db2DriverMatcher.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/Db2DriverMatcher.java
@@ -28,7 +28,7 @@ public class Db2DriverMatcher implements DriverMatcher {
private String jdbcUrl;
@Override
- public boolean isMatch(final String jdbcUrl) {
+ public boolean test(final String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
return jdbcUrl.startsWith("jdbc:db2:");
}
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/DriverMatcher.java b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/DriverMatcher.java
index b3f9eb5de..5b65e1e00 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/DriverMatcher.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/DriverMatcher.java
@@ -12,22 +12,16 @@
package org.dromara.hutool.db.driver.matcher;
+import java.util.function.Predicate;
+
/**
* 驱动匹配接口,通过实现此接口,可以:
- * 通过{@link #isMatch(String)} 判断JDBC URL 是否匹配驱动的要求
+ * 通过{@link #test(Object)} 判断JDBC URL 是否匹配驱动的要求
* 通过{@link #getClassName()} 获取对应的驱动类名称
*
* @author looly
*/
-public interface DriverMatcher {
-
- /**
- * 自定义规则是否匹配 JDBC URL
- *
- * @param jdbcUrl JDBC URL
- * @return 是否匹配
- */
- boolean isMatch(final String jdbcUrl);
+public interface DriverMatcher extends Predicate {
/**
* 获取对应的驱动类名称
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/MysqlDriverMatcher.java b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/MysqlDriverMatcher.java
index b6a71de8c..bd4c211fa 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/MysqlDriverMatcher.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/MysqlDriverMatcher.java
@@ -34,7 +34,7 @@ public class MysqlDriverMatcher implements DriverMatcher {
}
@Override
- public boolean isMatch(final String jdbcUrl) {
+ public boolean test(final String jdbcUrl) {
return jdbcUrl.startsWith("jdbc:mysql:")
// 阿里的Mysql分布式集群
|| jdbcUrl.startsWith("jdbc:cobar:")
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/StartsWithDriverMatcher.java b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/StartsWithDriverMatcher.java
index c13468cf9..5619ea338 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/StartsWithDriverMatcher.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/driver/matcher/StartsWithDriverMatcher.java
@@ -35,7 +35,7 @@ public class StartsWithDriverMatcher implements DriverMatcher {
}
@Override
- public boolean isMatch(final String jdbcUrl) {
+ public boolean test(final String jdbcUrl) {
for (final String startsWithStr : startsWithStrs) {
if (jdbcUrl.startsWith(startsWithStr)) {
return true;
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSWrapper.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSWrapper.java
index 9c2b6e53b..1109de772 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSWrapper.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSWrapper.java
@@ -14,7 +14,7 @@ package org.dromara.hutool.db.ds;
import org.dromara.hutool.core.exception.CloneException;
import org.dromara.hutool.core.io.IoUtil;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import javax.sql.DataSource;
import java.io.Closeable;
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/ConnectionWrapper.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/ConnectionWrapper.java
index d8aa16fb7..673b71255 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/ConnectionWrapper.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/pooled/ConnectionWrapper.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.db.ds.pooled;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import java.sql.Array;
import java.sql.Blob;
diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/sql/StatementWrapper.java b/hutool-db/src/main/java/org/dromara/hutool/db/sql/StatementWrapper.java
index e7ecab26f..32869a84d 100644
--- a/hutool-db/src/main/java/org/dromara/hutool/db/sql/StatementWrapper.java
+++ b/hutool-db/src/main/java/org/dromara/hutool/db/sql/StatementWrapper.java
@@ -14,7 +14,7 @@ package org.dromara.hutool.db.sql;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.collection.iter.ArrayIter;
-import org.dromara.hutool.core.func.SimpleWrapper;
+import org.dromara.hutool.core.lang.wrapper.SimpleWrapper;
import org.dromara.hutool.core.lang.Assert;
import java.io.InputStream;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/Session.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/Session.java
index 58ebb1f6c..53abf0d4e 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/Session.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/ssh/Session.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.extra.ssh;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import org.dromara.hutool.core.io.IORuntimeException;
import java.io.Closeable;
diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/engine/TemplateEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/engine/TemplateEngine.java
index 11c2e2649..449c2c4ea 100644
--- a/hutool-extra/src/main/java/org/dromara/hutool/extra/template/engine/TemplateEngine.java
+++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/template/engine/TemplateEngine.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.extra.template.engine;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import org.dromara.hutool.extra.template.Template;
import org.dromara.hutool.extra.template.TemplateConfig;
diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/HttpExchangeWrapper.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/HttpExchangeWrapper.java
index 1d5960044..d3a8a6082 100644
--- a/hutool-http/src/main/java/org/dromara/hutool/http/server/HttpExchangeWrapper.java
+++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/HttpExchangeWrapper.java
@@ -16,7 +16,7 @@ import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpPrincipal;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
import java.io.IOException;
import java.io.InputStream;
diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/serialize/JSONStringer.java b/hutool-json/src/main/java/org/dromara/hutool/json/serialize/JSONStringer.java
index b0b9fea83..981820cbf 100644
--- a/hutool-json/src/main/java/org/dromara/hutool/json/serialize/JSONStringer.java
+++ b/hutool-json/src/main/java/org/dromara/hutool/json/serialize/JSONStringer.java
@@ -12,7 +12,7 @@
package org.dromara.hutool.json.serialize;
-import org.dromara.hutool.core.func.Wrapper;
+import org.dromara.hutool.core.lang.wrapper.Wrapper;
/**
* {@code JSONString}接口定义了一个{@code toJSONString()}