RxJava-তে Multiple Observables একত্রে ম্যানেজ করার জন্য বেশ কয়েকটি পদ্ধতি এবং অপারেটর আছে। এগুলো ব্যবহার করে আপনি বিভিন্ন Observable থেকে ডেটা সংগ্রহ করতে, একত্রিত করতে বা নির্ধারিত ক্রমানুসারে পরিচালনা করতে পারেন।
1. merge(): Observables একত্রে যুক্ত করা
merge() অপারেটর ব্যবহার করে একাধিক Observable কে একত্রে মিশ্রিত করা যায়।
- ডেটা যেকোনো Observable থেকে আসতে পারে, কিন্তু এটি ডেটার এমিশন পারালাল ভাবে হয়।
- Concurrency-friendly।
উদাহরণ:
Observable<String> observable1 = Observable.just("A", "B", "C");
Observable<String> observable2 = Observable.just("1", "2", "3");
Observable.merge(observable1, observable2)
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: A
Received: B
Received: C
Received: 1
Received: 2
Received: 3
2. concat(): Observables সিরিয়াল ম্যানেজমেন্ট
concat() অপারেটর Observables কে সিরিয়াল ক্রমে একত্রিত করে।
- ডেটা প্রথম Observable শেষ হওয়ার পরপরই দ্বিতীয় Observable থেকে এমিট হয়।
উদাহরণ:
Observable<String> observable1 = Observable.just("A", "B", "C");
Observable<String> observable2 = Observable.just("1", "2", "3");
Observable.concat(observable1, observable2)
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: A
Received: B
Received: C
Received: 1
Received: 2
Received: 3
3. zip(): Observables এর ডেটা জোড়া করা
zip() অপারেটর ব্যবহার করে একাধিক Observable থেকে ডেটা জোড়া বানিয়ে এমিট করা হয়।
- প্রতিটি Observable এর ডেটা সিরিয়াল ক্রমে জোড়া হয়।
উদাহরণ:
Observable<String> observable1 = Observable.just("A", "B", "C");
Observable<String> observable2 = Observable.just("1", "2", "3");
Observable.zip(
observable1,
observable2,
(item1, item2) -> item1 + item2 // Combine logic
)
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: A1
Received: B2
Received: C3
4. combineLatest(): সর্বশেষ ডেটা ব্যবহার
combineLatest() অপারেটর Observables এর সর্বশেষ এমিট হওয়া ডেটা একত্রিত করে।
- যেকোন Observable নতুন ডেটা এমিট করলে, এটি সমস্ত Observables এর সর্বশেষ ডেটা ব্যবহার করে।
উদাহরণ:
Observable<String> observable1 = Observable.just("A", "B", "C");
Observable<String> observable2 = Observable.just("1", "2", "3");
Observable.combineLatest(
observable1,
observable2,
(item1, item2) -> item1 + item2 // Combine logic
)
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: C3
5. flatMap(): Observables এর ডেটা সমান্তরালভাবে প্রক্রিয়া করা
flatMap() অপারেটর এক Observable এর ডেটা ব্যবহার করে নতুন Observables তৈরি করে এবং সবগুলোকে একত্রে মিশ্রিত করে।
উদাহরণ:
Observable<String> observable = Observable.just("A", "B", "C");
observable
.flatMap(item -> Observable.just(item + "1", item + "2"))
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: A1
Received: A2
Received: B1
Received: B2
Received: C1
Received: C2
6. switchMap(): ডেটা স্যুইচ করা
switchMap() অপারেটর Observables এর প্রতিটি নতুন ডেটা জন্য পুরানো Observable কে প্রতিস্থাপন করে।
উদাহরণ:
Observable<String> observable = Observable.just("A", "B", "C");
observable
.switchMap(item -> Observable.just(item + "1", item + "2"))
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: C1
Received: C2
7. startWith(): Observable-এর আগে ডেটা এমিট করা
startWith() অপারেটর ব্যবহার করে Observable এর ডেটার আগে প্রাথমিক ডেটা এমিট করা যায়।
উদাহরণ:
Observable<String> observable = Observable.just("B", "C");
observable
.startWith("A")
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: A
Received: B
Received: C
8. amb(): প্রথম Observable নির্বাচন করা
amb() অপারেটর ব্যবহার করে যে Observable প্রথম ডেটা এমিট করবে, সেটি বেছে নেওয়া হয়।
উদাহরণ:
Observable<String> observable1 = Observable.just("A").delay(1, TimeUnit.SECONDS);
Observable<String> observable2 = Observable.just("B");
Observable.ambArray(observable1, observable2)
.subscribe(item -> System.out.println("Received: " + item));
আউটপুট:
Received: B
উপসংহার:
RxJava-তে Multiple Observables পরিচালনার জন্য অনেক অপারেটর রয়েছে। কোন অপারেটর ব্যবহার করবেন, তা নির্ভর করে আপনার প্রয়োজনীয়তা এবং ডেটার আচরণের উপর।
merge()এবংconcat()ব্যবহার করা হয় Observables যুক্ত করতে।zip()এবংcombineLatest()ব্যবহার করা হয় ডেটা একত্রিত করতে।flatMap()এবংswitchMap()ব্যবহৃত হয় ডেটার ট্রান্সফরমেশনের জন্য।
এই অপারেটরগুলি Reactive Programming কে আরও শক্তিশালী এবং কার্যকর করে তোলে।
Read more