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 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) {