Ein Stream unterstützt mehrere Operationen und diese Operationen sind in intermediate
und terminal
Operationen unterteilt.
Der Unterschied zwischen diesen Operationen ist, dass eine Zwischenoperation faul ist, während eine Terminaloperation dies nicht ist. Wenn Sie eine Zwischenoperation für einen Stream aufrufen, wird die Operation nicht sofort ausgeführt. Es wird nur ausgeführt, wenn eine Terminaloperation in diesem Stream aufgerufen wird. In gewisser Weise wird eine Zwischenoperation gespeichert und wird aufgerufen, sobald eine Terminaloperation aufgerufen wird. Sie können mehrere Zwischenoperationen verketten, und keiner von ihnen wird irgendetwas tun, bis Sie eine Terminaloperation aufrufen. Zu diesem Zeitpunkt werden alle Zwischenoperationen, die Sie zuvor aufgerufen haben, zusammen mit der Terminaloperation aufgerufen.
Alle Zwischenoperationen geben Stream zurück (können verkettet werden), während Terminaloperationen dies nicht tun. Zwischenoperationen sind:
filter(Predicate<T>)
map(Function<T>)
flatmap(Function<T>)
sorted(Comparator<T>)
peek(Consumer<T>)
distinct()
limit(long n)
skip(long n)
Terminal-Operationen erzeugt einen nicht-Strom (nicht verkettet werden) Ergebnis wie Grundwert, eine Sammlung oder gar keinen Wert überhaupt.
Terminal Operations sind:
forEach
toArray
reduce
collect
min
max
count
anyMatch
allMatch
noneMatch
findFirst
findAny
Last 5 sind Kurzschlussoperationen.
Streams sind faul, Code tatsächlich etwas tun, wenn eine Terminaloperation aufgerufen wird wie Summe, Toarray etc und Filter, Karte sind Zwischen, wahrscheinlich ein Betrüger –