我有一个集合Predicates
,比如说List<Predicate<File>>
。然后我有一个File
,我需要获取与文件匹配的谓词(如果有的话)。我正在考虑使用的思路,Iterables.find()
但当然这需要 aPredicate
不是一个值才能传递给 a Predicate
。我想过实现以下但不知道是否已经存在机制。
public static <T> Predicate<Predicate<? super T>> createInversePredicate(
final T value) {
return new Predicate<Predicate<? super T>>() {
@Override
public boolean apply(Predicate<? super T> input) {
return input.apply(value);
}
};
}
这将允许我执行以下操作:
private List<Predicate<File>> filters = ...;
@Nullable
Predicate<File> findMatching(File file){
return Iterables.find(filters, createInversePredicate(file), null);
}
有没有更好的办法?