Sobes.tech
Junior — Middle

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ę.