Sobes.tech
Junior — Middle

Можете ли да обясните какво означава терминът 'нетерминална операция' при работа с потоци от данни в API Stream?

sobes.tech AI

Отговор от AI

В API за потоци на Java операциите се делят на терминални и нетерминални (междинни).

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

Примери за нетерминални операции:

  • filter()
  • map()
  • sorted()
  • distinct()

Тези операции са лениви: не се изпълняват, докато не бъде извикана терминална операция, например, forEach(), collect(), count().

Пример:

List<String> list = Arrays.asList("a", "bb", "ccc");

list.stream()
    .filter(s -> s.length() > 1) // нетерминална
    .map(String::toUpperCase)    // нетерминална
    .forEach(System.out::println); // терминална

По този начин, нетерминалните операции позволяват да се изгражда верига от преобразувания, а терминалната стартира изпълнението.