Объединение предикатов в один с помощью Stream API

У меня есть список предикатов (List<Predicate<String>>), которые я хочу объединить в цепочку, используя методы or. Как я могу использовать Stream API для достижения этого?

Что вы пробовали? Зачем здесь нужно использовать Stream API?

Thomas 12.05.2022 10:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать reduce, чтобы соединить их все вместе с or, получив один Predicate<String>. Как это:

List<Predicate<String>> predicates = getPredicates();

Predicate<String> p = predicates.stream()
    .reduce(s -> false, Predicate::or);

Просто любопытно, почему личность ложная? Это может зависеть от контекста, но я должен был подумать, что это должно быть правдой при сокращении списка с помощью OR и, например, при использовании его в потоке в качестве фильтра.

Eritrean 12.05.2022 10:12

@Eritrean Если бы идентификатор был s -> true, то комбинированный предикат всегда был бы успешным, независимо от списка предикатов.

khelwood 12.05.2022 10:13

Другие вопросы по теме