我有一个集合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);
}
有没有更好的办法?