Czym różnią się operacje końcowe i niekońcowe w API Stream pod względem funkcji i przeznaczenia?
sobes.tech AI
Odpowiedź od AI
W API Stream operacje końcowe i niekońcowe różnią się przeznaczeniem i zachowaniem:
-
Operacje niekońcowe (intermediate) — to operacje, które zwracają nowy strumień i pozwalają na budowanie łańcucha transformacji. Są leniwe, czyli nie są wykonywane od razu, a tylko po wywołaniu operacji końcowej. Przykłady:
filter(),map(),sorted(),distinct(). -
Operacje końcowe (terminal) — kończą łańcuch operacji i uruchamiają przetwarzanie danych. Zwracają wynik (np. kolekcję, liczbę, void). Po operacji końcowej strumień jest uważany za zamknięty i nie można go używać ponownie. Przykłady:
collect(),forEach(),reduce(),count().
Przykład:
List<String> result = list.stream()
.filter(s -> s.startsWith("A")) // nie końcowa
.map(String::toUpperCase) // nie końcowa
.collect(Collectors.toList()); // końcowa
Tutaj filtrowanie i transformacja nie są wykonywane od razu, a tylko po wywołaniu collect(), które uruchamia przetwarzanie i zwraca końcową listę.