У меня есть коллекция Predicates
, скажем List<Predicate<File>>
. Затем у меня есть один File
, и мне нужно получить предикат (если есть), который соответствует файлу. Я думал о том, как использовать Iterables.find()
, но, конечно же, он принимает Predicate
, а не значение, которое нужно передать в 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);
}
есть лучший способ?
Он существует уже служебный метод, как «createInversePredicate»? Если нет, я должен предложить это как проблему? –
Вы могли бы, но это не похоже на очень распространенный случай использования. –