From 744634dbdd7ceaae7f784f7b98b1fb5c26a777ed Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Tue, 12 Sep 2017 19:34:50 +0800 Subject: [PATCH] =?UTF-8?q?ResourceFactory=20=E5=A2=9E=E5=8A=A0=20=20publi?= =?UTF-8?q?c=20=20List=20query(final=20BiPredicate=20pr?= =?UTF-8?q?edicate)=20=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/util/ResourceFactory.java | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) 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) {