Как я могу применить несколько предикатов к методу java.util.Stream's
filter()
?
Это то, что я делаю сейчас, но мне это не очень нравится. У меня есть Collection
вещей, и мне нужно уменьшить количество вещей на основе Collection
фильтров (предикатов):
Collection<Thing> things = someGenerator.someMethod();
List<Thing> filtered = things.parallelStream().filter(p -> {
for (Filter f : filtersCollection) {
if (f.test(p))
return true;
}
return false;
}).collect(Collectors.toList());
Я знаю, что если бы я знал количество фильтров вверх, я мог бы сделать что-то вроде этого:
List<Thing> filtered = things.parallelStream().filter(filter1).or(filter2).or(filter3)).collect(Collectors.toList());
Но как я могу применить неизвестное число предикатов без смешивания стилей программирования? Знайте, что это выглядит как-то уродливо...