Sobes.tech
Junior — Middle

როგორ განსხვავდება Stream API-ში ტერმინალური და ტერმინალური არამატერიალური ოპერაციები მათი ფუნქციებისა და დანიშნულების მიხედვით?

sobes.tech AI

პასუხი AI-სგან

Stream 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(), რომელიც იწყებს დამუშავებას და აბრუნებს საბოლოო სიის.