Java 8-এ Streams API ডেটা প্রসেসিংয়ের জন্য একটি শক্তিশালী টুল সরবরাহ করে, যার মাধ্যমে বিভিন্ন ধরণের ফাংশনাল অপারেশন করা যায়। স্ট্রিম API-তে দুটি প্রধান ধরনের অপারেশন আছে: Intermediate Operations এবং Terminal Operations।
Intermediate Operations এবং Terminal Operations এর মধ্যে পার্থক্য হলো:
- Intermediate Operations স্ট্রিমের উপরে কাজ করে, কিন্তু তারা স্ট্রিমকে পরিবর্তন করে না, বরং একটি নতুন স্ট্রিম প্রদান করে।
- Terminal Operations স্ট্রিমের শেষ অপারেশন, যা স্ট্রিমের ওপর কাজ সম্পন্ন করে এবং সাধারণত একটি ফলাফল বা একটি পার্শ্ব-প্রভাব তৈরি করে।
এখানে map, filter, এবং collect এর সাহায্যে Intermediate এবং Terminal Operations ব্যাখ্যা করা হচ্ছে।
১. Intermediate Operations
Intermediate Operations স্ট্রিমের মধ্যে ট্রান্সফরমেশন বা ফিল্টারিং কাজ করে, তবে তারা স্ট্রিমকে পরিবর্তন করে না, শুধুমাত্র নতুন স্ট্রিম তৈরি করে। এই অপারেশনগুলি লেজি (lazy), অর্থাৎ তারা তখনই কার্যকর হয় যখন Terminal Operation চালানো হয়।
map() - Intermediate Operation
map() একটি Intermediate Operation যা একটি ফাংশন ব্যবহার করে স্ট্রিমের প্রতিটি উপাদানকে রূপান্তরিত করে। এটি প্রতিটি উপাদানকে একধরনের নতুন অবজেক্টে রূপান্তর করতে সাহায্য করে।
উদাহরণ:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class MapExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squaredNumbers = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList());
System.out.println(squaredNumbers); // Output: [1, 4, 9, 16, 25]
}
}এখানে, map() প্রতিটি সংখ্যাকে তার বর্গে রূপান্তরিত করেছে।
filter() - Intermediate Operation
filter() একটি Intermediate Operation যা একটি শর্ত বা পেডিকেট ব্যবহার করে স্ট্রিমের উপাদানগুলি ফিল্টার করে। এটি স্ট্রিমের কিছু উপাদানকে বাদ দেয় এবং শুধুমাত্র শর্ত পূর্ণ করা উপাদানগুলি রাখে।
উদাহরণ:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FilterExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // Output: [2, 4]
}
}এখানে, filter() শুধুমাত্র যে সংখ্যাগুলি even (যুগল) তা নির্বাচন করেছে।
২. Terminal Operations
Terminal Operations হল সেই অপারেশন যা স্ট্রিমের প্রক্রিয়া শেষ করে এবং একটি ফলাফল বা পার্শ্ব-প্রভাব প্রদান করে। স্ট্রিমে Terminal Operations পরিচালিত হলে, স্ট্রিমটি শেষ হয়ে যায় এবং কোনও নতুন স্ট্রিম তৈরি হয় না।
collect() - Terminal Operation
collect() একটি Terminal Operation যা স্ট্রিমের উপাদানগুলো সংগ্রহ করে এবং একটি নতুন ডেটা স্ট্রাকচারে (যেমন List, Set, Map) রূপান্তর করে।
উদাহরণ:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class CollectExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // Output: [2, 4]
}
}এখানে, collect() ফিল্টার করা উপাদানগুলো একটি নতুন List এ সংগ্রহ করেছে।
পার্থক্য এবং সম্পর্ক:
| বৈশিষ্ট্য | Intermediate Operations | Terminal Operations |
|---|---|---|
| ফলাফল | একটি নতুন স্ট্রিম তৈরি করে। | একটি ফলাফল বা পার্শ্ব-প্রভাব রিটার্ন করে। |
| এফেক্ট | স্ট্রিমে পরিবর্তন না ঘটিয়ে একটি নতুন স্ট্রিম প্রদান করে। | স্ট্রিমের প্রক্রিয়া সম্পন্ন করে এবং ডেটার সাথে কাজ করে। |
| উদাহরণ | map(), filter(), flatMap(), distinct() | collect(), forEach(), reduce(), count() |
| লেজি (Lazy) | লেজি অপারেশন, শুধুমাত্র Terminal Operation চললে কার্যকর হয়। | ইহা অগ্রসর হতে থাকে এবং কার্যকরভাবে স্ট্রিমের প্রক্রিয়া সম্পন্ন করে। |
| বিভিন্ন ধরণের অপারেশন | ট্রান্সফর্মেশন, ফিল্টারিং, লিমিটিং, শিফটিং | স্ট্রিমে ডেটা সংগ্রহ করা, হিসাব করা, পার্শ্ব-প্রভাব তৈরি করা |
সারসংক্ষেপ:
- Intermediate Operations স্ট্রিমের ডেটার উপর কাজ করে এবং একটি নতুন স্ট্রিম তৈরি করে, তবে এটি কোডের ফলস্বরূপ কোন পরিবর্তন ঘটায় না যতক্ষণ না একটি Terminal Operation কার্যকর করা হয়। উদাহরণ:
map(),filter(),distinct(), ইত্যাদি। - Terminal Operations হল শেষ অপারেশন যা স্ট্রিমের উপর কাজ করে এবং কোনো ফলাফল বা পার্শ্ব-প্রভাব তৈরি করে। উদাহরণ:
collect(),reduce(),forEach(),count()ইত্যাদি।
map(), filter(), এবং collect() স্ট্রিম API-তে প্রায়ই ব্যবহৃত অপারেশন যা স্ট্রিম ডেটার সাথে কাজ করার প্রক্রিয়াকে আরো শক্তিশালী, পরিষ্কার, এবং কার্যকরী করে তোলে।
Read more