Java Stream API (Part IV)

მოგესამებით, ვაგრძელებთ რა წინა სამი პოსტის თემებს (Part I, Part II, Part III) და გთავაზობთ ამ თემაზე ბოლო მე-4 ნაწილს. ამ ნაწილში განვიხილავთ ე.წ. შეგროვების Collecting მეთოდებს. ზოგჯერ არის შემთხვევა, როდესაც გვინდა, რომ Stream-დან მივიღოთ კოლექცია. ამისთვის Java Stream API გვთავაზობს collect მეთოდს, რომელსაც შემდეგნაირი სიგნატურა აქვს :

<R, A> R collect(Collector<? super T, A, R> collectorFunc)

R არის რეზულტატის ტიპი, ხოლო T იმ კოლექციის ტიპი, რომლისგანაც მიღებულია Stream-ი. ეს უკანასკნელი არის terminal ოპერაცია.  Collectors კლასი არის  java.util.stream პაკეტში და განსაზღვრავს რამდენიმე სტატიკურ collector მეთოდს, თუმცა ჩვენ მხოლოდ toList() და toSet()-ს განვიხილავთ. მაგალითად List-ის მიღება შესაძლებელია შემდეგნაირად: collect(Collectors.toList()) . მოდით მეტი თვალსაჩინოებისთვის განვიხილოთ ასეთი მაგალითი. ვთქვათ გვაქვს Person კლასი ველებით: სახელი და გვარი, და მისი რამდენიმე ობიექტი. ჩვენ გვინდა რომ names List-ში ჩავყაროთ ამ ობიექტების სახელები, ხოლო surnames Set-ში ჩავყაროთ ამ ობიექტების გვარები.

SA1

SA2

დავაკვირდეთ, რომ names List-ის მიღების შემდეგ, stream-ი ავიღეთ ახლიდან, რადგან collect მეთოდი არის terminal ოპერაცია. ჩვენ თუ არ გავაკეთებდით ამას და ისე გავუშვებდით ჩვენს პროგრამას მივიღებდით შეცდომას. ასევე შედეგში დავაკვირდეთ იმას, რომ names-ში ელემენტების რაოდენობა არის 5, რადგან არის List-ი და ელემენტების დუბლირება შეიძლება, ხოლო surname-ში ელემენტების რაოდენობა არის 3, რადგან Set-ში ელემენტები უნიკალურია.

თუ არ გაგიშვიათ, ეს კოდი, მაშინ იცოდეთ, რომ შედეგი არის შემდეგი :

SA3

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