Mein Kollege und ich hatten einen Fehler, der auf unserer Annahme beruhte, dass ein leerer Stream-Aufruf zurückkehren allMatch()
würde false
.
if (myItems.allMatch(i -> i.isValid()) {
//do something
}
Natürlich ist es unsere Schuld, Dokumentation anzunehmen und nicht zu lesen. Was ich jedoch nicht verstehe, ist, warum das Standardverhalten allMatch()
für einen leeren Stream zurückgegeben wird true
. Was war der Grund dafür? Wie die anyMatch()
(die im Gegensatz dazu false zurückgibt) wird diese Operation auf eine zwingende Weise verwendet, die von der Monade abweicht und wahrscheinlich in einer if
Anweisung verwendet wird. Gibt es angesichts dieser Tatsachen einen Grund, warum es für die meisten Verwendungszwecke wünschenswert ist , allMatch()
standardmäßig true
einen leeren Stream zu verwenden?
allMatch
wahr ist, dies auch der Fall sein sollteanyMatch
. Zusätzlich für den leeren Fall,allMatch(...) == noneMatch(...)
der auch komisch ist.