RxJava-তে Transformation, Filtering, এবং Combining Operators ব্যবহার করে আমরা ডেটা স্ট্রিমকে রূপান্তর করতে, ফিল্টার করতে এবং একাধিক স্ট্রিমকে একত্রিত করতে পারি। এরা functional programming স্টাইল ব্যবহার করে asynchronous ডেটা স্ট্রিম প্রক্রিয়াকরণ সহজ করে।
1. Transformation Operators
Transformation Operators ডেটা স্ট্রিমের উপাদানগুলোকে রূপান্তর করে।
(a) map
একটি উপাদানকে অন্য ফর্ম্যাটে রূপান্তরিত করতে ব্যবহৃত হয়।
Observable.just(1, 2, 3, 4)
.map(item -> item * 2) // প্রতিটি উপাদানকে ২ দিয়ে গুণ
.subscribe(item -> System.out.println("Transformed: " + item));
Output:
Transformed: 2
Transformed: 4
Transformed: 6
Transformed: 8
(b) flatMap
একটি উপাদানকে নতুন একটি Observable-এ রূপান্তরিত করে এবং তাদের একত্রিত করে।
Observable.just("Hello", "World")
.flatMap(item -> Observable.just(item.toUpperCase()))
.subscribe(item -> System.out.println("FlatMapped: " + item));
Output:
FlatMapped: HELLO
FlatMapped: WORLD
(c) scan
পূর্বের উপাদানের সাথে বর্তমান উপাদানের accumulator function প্রয়োগ করে।
Observable.just(1, 2, 3, 4)
.scan((total, next) -> total + next)
.subscribe(item -> System.out.println("Accumulated: " + item));
Output:
Accumulated: 1
Accumulated: 3
Accumulated: 6
Accumulated: 10
2. Filtering Operators
Filtering Operators ব্যবহার করে স্ট্রিম থেকে নির্দিষ্ট উপাদান ফিল্টার করা যায়।
(a) filter
নির্দিষ্ট শর্ত পূরণ করে এমন উপাদানগুলো রাখতে ব্যবহার হয়।
Observable.just(1, 2, 3, 4, 5)
.filter(item -> item % 2 == 0) // জোড় সংখ্যা নির্বাচন
.subscribe(item -> System.out.println("Filtered: " + item));
Output:
Filtered: 2
Filtered: 4
(b) take
প্রথম N উপাদান নিতে ব্যবহৃত হয়।
Observable.just(1, 2, 3, 4, 5)
.take(3)
.subscribe(item -> System.out.println("Taken: " + item));
Output:
Taken: 1
Taken: 2
Taken: 3
(c) distinct
একই ডেটা একাধিকবার আসা থেকে প্রতিরোধ করে।
Observable.just(1, 2, 2, 3, 4, 4, 5)
.distinct()
.subscribe(item -> System.out.println("Distinct: " + item));
Output:
Distinct: 1
Distinct: 2
Distinct: 3
Distinct: 4
Distinct: 5
3. Combining Operators
Combining Operators বিভিন্ন Observable-কে একত্রিত করতে ব্যবহৃত হয়।
(a) merge
দুটি Observable একত্রিত করে এবং parallel ডেটা emission পরিচালনা করে।
Observable<String> observable1 = Observable.just("A", "B");
Observable<String> observable2 = Observable.just("C", "D");
Observable.merge(observable1, observable2)
.subscribe(item -> System.out.println("Merged: " + item));
Output:
Merged: A
Merged: B
Merged: C
Merged: D
(b) zip
দুটি Observable-এর emission একত্রিত করে একটি নতুন emission তৈরি করে।
Observable<String> observable1 = Observable.just("X", "Y");
Observable<Integer> observable2 = Observable.just(1, 2);
Observable.zip(observable1, observable2, (item1, item2) -> item1 + item2)
.subscribe(item -> System.out.println("Zipped: " + item));
Output:
Zipped: X1
Zipped: Y2
(c) combineLatest
প্রতিটি Observable থেকে শেষ emitted value গ্রহণ করে তাদের একত্রিত করে।
Observable<String> observable1 = Observable.just("A", "B");
Observable<Integer> observable2 = Observable.just(1, 2, 3);
Observable.combineLatest(
observable1,
observable2,
(item1, item2) -> item1 + item2
).subscribe(item -> System.out.println("Combined: " + item));
Output:
Combined: B1
Combined: B2
Combined: B3
উপসংহার
- Transformation Operators: ডেটা পরিবর্তন করতে ব্যবহৃত হয়।
- Filtering Operators: স্ট্রিম থেকে নির্দিষ্ট ডেটা বেছে নিতে সাহায্য করে।
- Combining Operators: একাধিক Observable থেকে ডেটা একত্রিত করতে ব্যবহৃত হয়।
এই Operators ব্যবহার করে asynchronous এবং event-driven programming আরও শক্তিশালী এবং কার্যকরী করা যায়।
Read more