Selon Java Doc Of allMatch ():
Renvoie si tous les éléments de ce flux correspondent au prédicat fourni. Peut ne pas évaluer le prédicat sur tous les éléments s'il n'est pas nécessaire pour déterminer le résultat. Si le flux est vide, {@code true} est renvoyé et le prédicat n'est pas évalué.
@apiNote
Cette méthode évalue la quantification universelle du prédicat sur les éléments du flux (pour tous x P (x)). Si le flux est vide, la quantification est dite satisfaite de manière vide et est toujours {@code true} (quel que soit P (x)).
prédicat à appliquer aux éléments de ce flux @return {@code true} si tous les éléments du flux correspondent au prédicat fourni ou si le flux est vide, sinon {@code false}
Dans ton cas:
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
Aucune autre évaluation n'aura lieu, car 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);
La sortie est:
Fred
Finda
Fish
Result true
Ici le flux est complètement traité car xP (x) = true à partir de chaque élément