Java Stream API (Part II)

ვაგრძელებთ წინა პოსტში განხილული თემების გაგრძელებას Java Stream API-ზე. ამ პოსტში მოდით საუბარი დავიწყოთ შემცირების ოპერაციებზე საუბარი. წინა პოსტში განხილული მაგალითი, რომ გავიხსენოთ მინიმალური და მაქსიმალური ელემენტის პოვნაზე Stream-ში, ეს ოპერაციები წარმოადგენს შემცირების ოპერაციებს, რადგან მათი რეზულტატი არის მხოლოდ ერთი ელემენტი. ასეთი ოპერაციაა აგრეთვე count(), რომელიც თვლის Stream-ში ელემენტების რაოდენობას. Stream API გვთავაზობს reduce ოპერაციას, რომელიც შეგვიძლია გამოვიყენოთ შემცირების ოპერაციებში. Stream API განსაზღვრავს reduce მეთოდის სამ ვარიანტს, მაგრამ ჩვენ ამ პოსტში განვიხილავთ ორ მათგანს.

Optional<T> reduce(BinaryOperator<T> accumulator)

T reduce(T identityVal, BinaryOperator<T> accumulator)

პირველი აბრუნებს Optional ტიპის ობიექტს, ხოლო მეორე აბრუნებს T ტიპის ობიექტს. ორივე პარამეტრში accumulator არის ფუნქცია, რომელიც ოპერირებს ორ ელემენტზე და აბრუნებს შედეგს. მეორე ვარიანტში identityVal არის მნიშვნელობა, რომელიც არის მარტივად რომ ვთქვათ ინიციალიზაციის ელემენტი. მაგალითზე რომ უკეთ ავხსნა, თუ accumulator ოპერაცია არის შეკრების  identityVal უნდა იყოს 0, რადგან 0 + x = x; ანუ identityVal არ ახდებს ოპერაციის შედეგზე გავლენას და ის არის იმ ელემენტის საწყისი მნიშვნელობა, რომელშიც შედეგი უნდა დაგროვდეს და ასევე გარკვეულ იტერაციაზე ის არის წინა მნიშვნელობა, რომელსაც დაემატება კონკრეტული იტერაციის შედეგი. accumulator ოპერაცია უნდა იყოს, stateless , რაც გულისხმობს იმას, რომ ოპერაცია არ უნდა იყოს დამოკიდებული ელემენტის მდგომარეობაზე. ასევე უნდა იყოს Non-interfering, რაც გულისხმობს იმას, რომ ოპერაციის შემდეგ ელემენტები არ უნდა შეიცვალოს (data source)-ის. ასევე უნდა იყოს ასოციაციური, რაც ნიშნავს იმას , რომ ელემენტების გადანაცვლებამ შედეგზე გავლენა არ უნდა მოახდინონ.

განვიხილოთ მასივის ელემენტების ნამრავლი :

SA1

 

2 thoughts on “Java Stream API (Part II)

Leave a Reply / უპასუხე

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / შეცვლა )

Twitter picture

You are commenting using your Twitter account. Log Out / შეცვლა )

Facebook photo

You are commenting using your Facebook account. Log Out / შეცვლა )

Google+ photo

You are commenting using your Google+ account. Log Out / შეცვლა )

Connecting to %s