Según Java Doc Of allMatch ():
Devuelve si todos los elementos de esta secuencia coinciden con el predicado proporcionado. Puede no evaluar el predicado en todos los elementos si no es necesario para determinar el resultado. Si la secuencia está vacía, se devuelve {@code true} y no se evalúa el predicado.
@apiNote
Este método evalúa la cuantificación universal del predicado sobre los elementos de la secuencia (para todos los x P (x)). Si la secuencia está vacía, se dice que la cuantificación se satisface por vacío y siempre es {@code true} (independientemente de P (x)).
predicado para aplicar a elementos de esta secuencia @return {@code true} si todos los elementos de la secuencia coinciden con el predicado proporcionado o la secuencia está vacía, de lo contrario {@code false}
En tu 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
No se realizarán más evaluaciones, porque XP (X) = falso
boolean result = Arrays.asList("Fred", "Finda", "Fish")
.stream()
.peek(System.out::println)
.allMatch(s -> s.startsWith("F"));
System.out.println("Result "+result);
Salida es:
Fred
Finda
Fish
Result true
Aquí la secuencia se procesó completamente porque xP (x) = verdadero de cada elemento