diff --git a/src/org/redkale/util/ResourceFactory.java b/src/org/redkale/util/ResourceFactory.java
index 873044725..ac0dbd06e 100644
--- a/src/org/redkale/util/ResourceFactory.java
+++ b/src/org/redkale/util/ResourceFactory.java
@@ -9,7 +9,7 @@ import java.lang.ref.WeakReference;
import java.lang.reflect.*;
import java.util.*;
import java.util.concurrent.*;
-import java.util.function.BiConsumer;
+import java.util.function.*;
import java.util.logging.*;
import javax.annotation.Resource;
@@ -99,7 +99,7 @@ public final class ResourceFactory {
* 1: "$"有特殊含义, 不能表示"$"资源本身
* 2: 只能是字母、数字、(短横)-、(下划线)_、点(.)的组合
*
- *
+ *
* @param name String
*/
public void checkName(String name) {
@@ -471,11 +471,11 @@ public final class ResourceFactory {
}
public List query(Class extends A> clazz) {
- return query(new ArrayList(), clazz);
+ return query(new ArrayList<>(), clazz);
}
public List query(Type clazz) {
- return query(new ArrayList(), clazz);
+ return query(new ArrayList<>(), clazz);
}
private List query(final List list, Type clazz) {
@@ -489,6 +489,21 @@ public final class ResourceFactory {
return list;
}
+ public List query(final BiPredicate predicate) {
+ return query(new ArrayList<>(), predicate);
+ }
+
+ private List query(final List list, final BiPredicate predicate) {
+ if (predicate == null) return list;
+ for (ConcurrentHashMap map : this.store.values()) {
+ for (Map.Entry en : map.entrySet()) {
+ if (predicate.test(en.getKey(), (A) en.getValue().value)) list.add((A) en.getValue().value);
+ }
+ }
+ if (parent != null) query(list, predicate);
+ return list;
+ }
+
private ResourceEntry findEntry(String name, Class extends A> clazz) {
Map map = this.store.get(clazz);
if (map != null) {