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