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 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 clazz) { Map map = this.store.get(clazz); if (map != null) {