Какое значение возвращает Stream.allMatch() для пустого потока?

Ответ

Метод allMatch() возвращает true для любого пустого Stream, независимо от заданного предиката.

Объяснение: Это поведение соответствует принципу «пустой истины» (vacuous truth) в логике. Утверждение «все элементы пустого множества удовлетворяют условию P» считается истинным по определению, так как не существует элемента, который бы его нарушал.

Пример:

Stream<String> emptyStream = Stream.empty();
boolean result = emptyStream.allMatch(s -> s.length() > 10); // Возвращает true
System.out.println(result); // true

Аналогичное поведение:

  • anyMatch() для пустого потока всегда возвращает false.
  • noneMatch() для пустого потока всегда возвращает true.

Ответ 18+ 🔞

А, слушай, вот эта штука с allMatch() — она же, блядь, реально охуевшая! Представь себе: пустой стрим, нихуя в нём нет, ни одной сущности, пустота, вакуум. И ты к этому вакууму применяешь предикат, любой, хоть самый ёбаный бредовый: «все элементы должны быть длиннее 10 символов» или «все элементы должны быть равны "пиздец"».

И что ты думаешь? Она возвращает true! Да, сука, true! Прям вот так вот, нагло, без стыда.

А знаешь, почему? Это, блядь, не баг, это философия, ёпта! В логике есть такое понятие — «пустая истина». Смотри: если элементов вообще нет, то не существует ни одного элемента, который бы нарушил твоё условие. Нельзя найти того, кого нет, и сказать: «А вот этот чувак условие не прошёл!». Его нет, блядь! Поэтому утверждение «все элементы (которых нет) удовлетворяют условию» — считается истинным по умолчанию. Гениально и немного поехавше, да?

Вот, смотри на код, тут всё честно:

Stream<String> emptyStream = Stream.empty();
boolean result = emptyStream.allMatch(s -> s.length() > 10); // Возвращает true
System.out.println(result); // true

Видишь? Пустой стрим. Предикат — полная хуйня, требующая от строк длины больше 10. А результат — true. Чистая, ёбаная, пустая истина.

И, кстати, его братья-операторы тоже не подводят, ведут себя предсказуемо ебануто:

  • anyMatch() на пустом стриме всегда false. Ну логично, блядь, как может «хотя бы один» удовлетворить условию, если этих «одних» — нихуя?
  • noneMatch() на пустом стриме всегда true. Опять же, не существует элемента, который бы условие нарушил (то есть удовлетворил). Поэтому утверждение «ни один не удовлетворяет» — истинно.

Вот такие пироги, блядь. Java иногда не просто язык, а целый трактат по логике, обёрнутый в синтаксис. Ёперный театр!