Conforme Java Doc Of allMatch ():
Retorna se todos os elementos desse fluxo correspondem ao predicado fornecido. Pode não avaliar o predicado em todos os elementos se não for necessário para determinar o resultado. Se o fluxo estiver vazio, {@code true} será retornado e o predicado não será avaliado.
@apiNote
Este método avalia a quantificação universal do predicado sobre os elementos do fluxo (para todos x P (x)). Se o fluxo estiver vazio, a quantificação será satisfeita de forma vaga e sempre será {@code true} (independentemente de P (x)).
predicado a aplicar aos elementos deste fluxo @return {@code true} se todos os elementos do fluxo corresponderem ao predicado fornecido ou o fluxo estiver vazio, caso contrário, {@code false}
No seu caso:
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
Nenhuma avaliação adicional ocorrerá, porque 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);
A saída é:
Fred
Finda
Fish
Result true
Aqui o fluxo é processado completamente porque xP (x) = true de cada elemento