Secondo Java Doc Of allMatch ():
Indica se tutti gli elementi di questo flusso corrispondono al predicato fornito. Potrebbe non valutare il predicato su tutti gli elementi se non necessario per determinare il risultato. Se il flusso è vuoto, viene restituito {@code true} e il predicato non viene valutato.
@apiNote
Questo metodo valuta la quantificazione universale del predicato sugli elementi del flusso (per tutti x P (x)). Se il flusso è vuoto, si dice che la quantificazione è soddisfatta vagamente ed è sempre {@code true} (indipendentemente da P (x)).
predicato da applicare agli elementi di questo flusso @return {@code true} se tutti gli elementi del flusso corrispondono al predicato fornito o il flusso è vuoto, altrimenti {@code false}
Nel tuo 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
Non verrà effettuata alcuna ulteriore valutazione, poiché 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);
L'output è:
Fred
Finda
Fish
Result true
Qui lo stream è stato elaborato completamente perché xP (x) = true da ciascun elemento