Sobes.tech
Junior — Middle

Как се различават терминалните и нетерминалните операции в API Stream по функции и предназначение?

sobes.tech AI

Отговор от AI

В API за потоци терминалните и нетерминалните операции се различават по предназначение и поведение:

  • Нет терминални операции (intermediate) — това са операции, които връщат нов поток и позволяват изграждането на верига от преобразувания. Те са лениви, тоест не се изпълняват веднага, а само при извикване на терминална операция. Примери: filter(), map(), sorted(), distinct().

  • Терминални операции (terminal) — завършват веригата от операции и стартират обработката на данните. Връщат резултат (например, колекция, число, void). След терминална операция потокът се счита за затворен и не може да бъде използван повторно. Примери: collect(), forEach(), reduce(), count().

Пример:

List<String> result = list.stream()
    .filter(s -> s.startsWith("A"))   // не терминална
    .map(String::toUpperCase)           // не терминална
    .collect(Collectors.toList());     // терминална

Тук филтрирането и преобразуването не се изпълняват веднага, а само при извикване на collect(), което стартира обработката и връща финалния списък.