Если у вас есть генератор предикатов, такой как этот тестовый
Supplier<Integer> seed = () -> (int) (Math.random() * 9 + 2); // in [2, 11]
Supplier<Predicate<Integer>> generator = () -> {
int seedNow = seed.get();
return (Integer value) -> (value % seedNow == 0);
};
, который, как вы знаете, предоставляет конечную последовательность фильтров,
вам лучше накопить их до того, какактуальная фильтрация
Predicate<Integer> cumulative = Stream.generate(generator)
.limit(5)
.reduce(Predicate::and).orElse((value) -> true);
и затем эксплойт
List<Integer> output = IntStream.range(0, 300)
.boxed()
.filter(cumulative)
.collect(Collectors.toList());