Guava লাইব্রেরি Java-তে কাজের সুবিধার্থে প্রচুর utility প্রদান করে। Streams এবং Iterables উভয়ই ডেটা প্রসেসিং এবং পুনরাবৃত্তির (iteration) জন্য ব্যবহৃত হয়, তবে তাদের উদ্দেশ্য, আচরণ এবং ব্যবহারের ক্ষেত্রে পার্থক্য রয়েছে।
Streams
Java 8 থেকে Streams API পরিচিতি পায়। এটি ডেটা প্রসেসিং-এর একটি নতুন পদ্ধতি প্রদান করে, যা কার্যকরী প্রোগ্রামিং ধারণা এবং প্যারালাল প্রসেসিং সহজ করে।
Streams-এর বৈশিষ্ট্য:
- ফাংশনাল প্রোগ্রামিং: Streams ফাংশনাল পদ্ধতিতে কাজ করে।
- লেজি প্রসেসিং (Lazy Evaluation): Streams তখনই ডেটা প্রসেস করে যখন তার প্রয়োজন হয়।
- ডেটা প্রসেসিং পাইপলাইন:
- Streams ডেটাকে একটি পাইপলাইনের মতো প্রক্রিয়াজাত করে।
- Intermediate operations (e.g.,
map,filter) এবং terminal operations (e.g.,collect,forEach) থাকে।
- Parallel Processing সাপোর্ট: Streams সহজে প্যারালাল প্রসেসিং পরিচালনা করতে পারে।
উদাহরণ:
import java.util.stream.Stream;
public class StreamExample {
public static void main(String[] args) {
Stream.of("apple", "banana", "cherry")
.filter(fruit -> fruit.startsWith("b"))
.map(String::toUpperCase)
.forEach(System.out::println); // Output: BANANA
}
}
Iterables
Iterable হল Java-এর একটি মূল কাঠামো যা java.lang.Iterable ইন্টারফেসের মাধ্যমে প্রদত্ত হয়। এটি Collections Framework-এর ভিত্তি এবং পুনরাবৃত্তি করার জন্য ব্যবহৃত হয়।
Iterables-এর বৈশিষ্ট্য:
- অপরিহার্য ভাবে সিকুয়েন্সিয়াল (Sequential): Iterable সবসময় সিকুয়েন্সিয়ালভাবে কাজ করে।
- ডেটা পুনরাবৃত্তি (Iteration): এটি
for-eachলুপ বাIteratorব্যবহার করে কাজ করে। - সরাসরি ডেটা প্রসেসিং নয়: Iterable শুধুমাত্র পুনরাবৃত্তি করার জন্য ব্যবহৃত হয়, Streams-এর মতো ডেটা প্রসেসিং ক্ষমতা নেই।
- Guava থেকে অতিরিক্ত সুবিধা: Guava-এর
Iterablesক্লাস অতিরিক্ত অপারেশন প্রদান করে, যেমনconcat,filter,transform, ইত্যাদি।
উদাহরণ:
import java.util.Arrays;
public class IterableExample {
public static void main(String[] args) {
Iterable<String> fruits = Arrays.asList("apple", "banana", "cherry");
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
Guava-এ Streams এবং Iterables-এর সংযোগ:
Guava Streams এবং Iterables-এর মধ্যে কাজ সহজ করতে বিভিন্ন ইউটিলিটি প্রদান করে।
Iterables থেকে Streams-এ রূপান্তর:
Guava Streams API ব্যবহার করে Iterable কে Streams-এ রূপান্তর করা যায়।
উদাহরণ:
import com.google.common.collect.Streams;
import java.util.Arrays;
import java.util.stream.Stream;
public class IterableToStream {
public static void main(String[] args) {
Iterable<String> fruits = Arrays.asList("apple", "banana", "cherry");
Stream<String> fruitStream = Streams.stream(fruits);
fruitStream.map(String::toUpperCase)
.forEach(System.out::println); // Output: APPLE BANANA CHERRY
}
}
Streams থেকে Iterables-এ রূপান্তর:
Streams কে Guava-এর সাহায্যে Iterable এ রূপান্তর করা যায়।
উদাহরণ:
import com.google.common.collect.Iterables;
import java.util.stream.Stream;
public class StreamToIterable {
public static void main(String[] args) {
Stream<String> fruitStream = Stream.of("apple", "banana", "cherry");
Iterable<String> fruits = fruitStream::iterator; // Convert Stream to Iterable
fruits.forEach(System.out::println); // Output: apple banana cherry
}
}
Streams এবং Iterables-এর তুলনা
| বৈশিষ্ট্য | Streams | Iterables |
|---|---|---|
| ব্যবহার | ডেটা প্রসেসিং এবং পাইপলাইনিং | ডেটার উপর পুনরাবৃত্তি |
| লেজি প্রসেসিং | হ্যাঁ | না |
| Functional Support | উচ্চ | সীমিত |
| Parallel Processing | হ্যাঁ | না |
| Guava Integration | Streams.stream() | Iterables ইউটিলিটি ক্লাস |
- Streams জটিল ডেটা প্রসেসিং-এর জন্য উপযুক্ত যেখানে Iterables পুনরাবৃত্তির জন্য ব্যবহার করা হয়।
- Guava লাইব্রেরি Streams এবং Iterables-এর মধ্যে রূপান্তর এবং কাজ সহজ করতে শক্তিশালী সমাধান প্রদান করে।
- Streams যখন ফাংশনাল স্টাইল প্রসেসিং-এর জন্য ব্যবহার হয়, Iterables ডেটার বেসিক traversal-এর জন্য আদর্শ।
Read more