Поток нулевых элементов возвращает true

У меня есть простой метод валидатора. Почему поток нулевых элементов возвращает true? Как это работает?

Что происходит после фильтрации по нулю?

private static boolean isNotValidCeo(List<Ceo> ceos) {
    if (CollectionUtils.isEmpty(ceos)) {
        return true;
    }

    return ceos.stream()
            .filter(Objects::nonNull)
            .map(Ceo::getSuperBonus)
            .allMatch(Objects::isNull);
}

Поток нулевых элементов возвращает true

проверьте документацию из allMatch(): «Возвращает: true если либо... или поток пуст»

user85421 30.05.2024 12:17

См. также Пустая истина

Sweeper 30.05.2024 12:24

Вы фильтр удаляете нули, но без кода getSuperBonus нет никакой подсказки относительно того, содержит ли поток нули или нет впоследствии.

DuncG 30.05.2024 13:40
allMatch(isNull) эквивалентно noneMatch(nonNull) или !anyMatch(nonNull), что означает, что оно пройдет, если не будет элемента, отличного от NULL.
shmosel 30.05.2024 21:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
4
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

.filter(Objects::nonNull) приводит к пустому набору, а allMatch для пустого набора является истиной, поскольку нет элементов, противоречащих правилу.

Поток пуст при вызове allMatch (поскольку все значения были отфильтрованы .filter(Objects::nonNull)). allMatch в пустом потоке всегда возвращает true.

Такое поведение allMatch описано в JavaDocs метода:

Примечание API:

Этот метод оценивает универсальную количественную оценку предиката по элементам потока (для всех x P(x)). Если поток пуст, говорят, что квантификация пусто удовлетворена и всегда равна true (независимо от P(x)).

[…]

Возврат:

true если либо все элементы потока соответствуют предоставленному предикату, либо поток пуст, в противном случае false

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