Відповідно до Java Doc Of allMatch ():
Повертає, чи всі елементи цього потоку відповідають наданому предикату. Не може оцінювати присудок щодо всіх елементів, якщо це не потрібно для визначення результату. Якщо потік порожній, повертається {@code true}, а предикат не оцінюється.
@apiNote
Цей метод оцінює універсальне кількісне визначення присудка над елементами потоку (для всіх x P (x)). Якщо потік порожній, сказано, що кількісне визначення є задоволеним і завжди {@code true} (незалежно від P (x)).
предикат застосовувати до елементів цього потоку @return {@code true}, якщо будь-які елементи потоку відповідають наданому предикату або потік порожній, інакше {@code false}
У вашому випадку:
1-
p(x) : s -> s.startsWith("F")
X : "Fred"
result : X P(X) = true
2-
p(x) : s -> s.startsWith("F")
X : "Jim"
result : X P(X) = false
Подальше оцінювання не відбуватиметься, оскільки XP (X) = false
boolean result = Arrays.asList("Fred", "Finda", "Fish")
.stream()
.peek(System.out::println)
.allMatch(s -> s.startsWith("F"));
System.out.println("Result "+result);
Вихід:
Fred
Finda
Fish
Result true
Тут потік обробляється повністю, тому що xP (x) = true з кожного елемента