Ответ к вопросу про allMatch/anyMatch: Малоизвестный факт, в | Java Interview Tasks
Ответ к вопросу про allMatch/anyMatch:
Малоизвестный факт, в документации написано следующее:
boolean allMatch(Predicate predicate);
return true if either all elements of the stream match the
provided predicate or the stream is empty, otherwise false
и
boolean anyMatch(Predicate predicate);
return true if any elements of the stream match the provided predicate, otherwise false
То есть allMatch() для пустого стрима вернет true, а anyMatch() вернет false.
Объяснить это можно так: для всех элементов пустого стрима любое условие выполнено.
В тоже время anyMatch вернет false, потому что нельзя найти элемент из коллекции, который удовлятворяет этому условию.
Такое поведение консистенто, например, для закона Де Моргана:
stream.allMatch(condition) равносильно !stream.anyMatch(!condition)