ResourceFactory 增加 public <A> List<A> query(final BiPredicate<String, A> predicate) 方法

This commit is contained in:
Redkale
2017-09-12 19:34:50 +08:00
parent de5ee844c4
commit 744634dbdd

View File

@@ -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: 只能是字母、数字、(短横)-、(下划线)_、点(.)的组合
* </pre></blockquote>
*
*
* @param name String
*/
public void checkName(String name) {
@@ -471,11 +471,11 @@ public final class ResourceFactory {
}
public <A> List<A> query(Class<? extends A> clazz) {
return query(new ArrayList<A>(), clazz);
return query(new ArrayList<>(), clazz);
}
public <A> List<A> query(Type clazz) {
return query(new ArrayList<A>(), clazz);
return query(new ArrayList<>(), clazz);
}
private <A> List<A> query(final List<A> list, Type clazz) {
@@ -489,6 +489,21 @@ public final class ResourceFactory {
return list;
}
public <A> List<A> query(final BiPredicate<String, A> predicate) {
return query(new ArrayList<>(), predicate);
}
private <A> List<A> query(final List<A> list, final BiPredicate<String, A> predicate) {
if (predicate == null) return list;
for (ConcurrentHashMap<String, ResourceEntry> map : this.store.values()) {
for (Map.Entry<String, ResourceEntry> 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 <A> ResourceEntry<A> findEntry(String name, Class<? extends A> clazz) {
Map<String, ResourceEntry> map = this.store.get(clazz);
if (map != null) {