Gemäß Java Doc Of allMatch ():
Gibt zurück, ob alle Elemente dieses Streams mit dem angegebenen Prädikat übereinstimmen. Möglicherweise wird das Prädikat nicht für alle Elemente ausgewertet, wenn dies zur Ermittlung des Ergebnisses nicht erforderlich ist. Wenn der Stream leer ist, wird {@code true} zurückgegeben und das Prädikat wird nicht ausgewertet.
@apiNote
Diese Methode bewertet die universelle Quantifizierung des Prädikats über die Elemente des Stroms (für alle x P (x)). Wenn der Strom leer ist, wird die Quantifizierung als leer erfüllt bezeichnet und ist immer {@code true} (unabhängig von P (x)).
Prädikat für Elemente dieses Streams @return {@code true}, wenn entweder alle Elemente des Streams mit dem angegebenen Prädikat übereinstimmen oder der Stream leer ist, andernfalls {@code false}
In Ihrem Fall:
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
Es findet keine weitere Auswertung statt, da XP (X) = false ist
boolean result = Arrays.asList("Fred", "Finda", "Fish")
.stream()
.peek(System.out::println)
.allMatch(s -> s.startsWith("F"));
System.out.println("Result "+result);
Ausgabe ist:
Fred
Finda
Fish
Result true
Hier wird der Stream vollständig verarbeitet, da xP (x) = true von jedem Element ist