Ответ
Метод 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 иногда не просто язык, а целый трактат по логике, обёрнутый в синтаксис. Ёперный театр!