Skip to content

Commit b43925e

Browse files
Merge pull request amitshekhariitbhu#35 from tuann10/implement-switch-map
implement switch map operator sample
2 parents b203b2a + 1c323b5 commit b43925e

File tree

6 files changed

+121
-0
lines changed

6 files changed

+121
-0
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ RxJava1 -> RxJava2
8282
* `Concat` -> emit the emissions from two or more Observables without interleaving them
8383
* `Replay` -> ensure that all observers see the same sequence of emitted items, even if they subscribe after the Observable has begun emitting items
8484
* `Merge` -> combine multiple Observables into one by merging their emissions
85+
* `SwitchMap` -> ransform the items emitted by an Observable into Observables, and mirror those items emitted by the most-recently transformed Observable
8586

8687

8788
# Highlights of the examples :
@@ -101,6 +102,7 @@ RxJava1 -> RxJava2
101102
* [ConcatExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java) - Using `concat` Operator
102103
* [MergeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java) - Using `merge` Operator
103104
* [DeferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java) - Using `defer` Observable
105+
* [SwitchMapExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java) - Using `switchMap` Observable
104106
* [IntervalExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java) - Using `Interval`
105107
* [RxBusActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java) - RxBus, RxJava2Bus, EventBus, RxEventBus, [Blog for reference](https://blog.mindorks.com/implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8)
106108
* [PaginationActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java) - Pagination for loadMore in RecyclerView

app/src/main/AndroidManifest.xml

+2
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@
126126
<activity
127127
android:name=".ui.compose.ComposeOperatorExampleActivity"
128128
android:label="@string/compose" />
129+
<activity android:name=".ui.operators.SwitchMapExampleActivity"
130+
android:label="@string/switch_map" />
129131
</application>
130132

131133
</manifest>

app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.rxjava2.android.samples.ui.operators.SimpleExampleActivity;
3131
import com.rxjava2.android.samples.ui.operators.SingleObserverExampleActivity;
3232
import com.rxjava2.android.samples.ui.operators.SkipExampleActivity;
33+
import com.rxjava2.android.samples.ui.operators.SwitchMapExampleActivity;
3334
import com.rxjava2.android.samples.ui.operators.TakeExampleActivity;
3435
import com.rxjava2.android.samples.ui.operators.ThrottleFirstExampleActivity;
3536
import com.rxjava2.android.samples.ui.operators.ThrottleLastExampleActivity;
@@ -165,4 +166,7 @@ public void startDelayActivity(View view) {
165166
startActivity(new Intent(OperatorsActivity.this,DelayExampleActivity.class));
166167
}
167168

169+
public void startSwitchMapActivity(View view) {
170+
startActivity(new Intent(OperatorsActivity.this, SwitchMapExampleActivity.class));
171+
}
168172
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package com.rxjava2.android.samples.ui.operators;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v7.app.AppCompatActivity;
6+
import android.util.Log;
7+
import android.view.View;
8+
import android.widget.Button;
9+
import android.widget.TextView;
10+
11+
import com.rxjava2.android.samples.R;
12+
import com.rxjava2.android.samples.utils.AppConstant;
13+
14+
import java.util.Random;
15+
import java.util.concurrent.TimeUnit;
16+
17+
import io.reactivex.Observable;
18+
import io.reactivex.ObservableSource;
19+
import io.reactivex.Observer;
20+
import io.reactivex.android.schedulers.AndroidSchedulers;
21+
import io.reactivex.disposables.Disposable;
22+
import io.reactivex.functions.Function;
23+
import io.reactivex.schedulers.Schedulers;
24+
25+
/**
26+
* Created by thanhtuan on 26/04/18.
27+
*/
28+
public class SwitchMapExampleActivity extends AppCompatActivity {
29+
30+
private static final String TAG = SwitchMapExampleActivity.class.getSimpleName();
31+
Button btn;
32+
TextView textView;
33+
34+
@Override
35+
protected void onCreate(@Nullable Bundle savedInstanceState) {
36+
super.onCreate(savedInstanceState);
37+
setContentView(R.layout.activity_example);
38+
39+
btn = (Button) findViewById(R.id.btn);
40+
textView = (TextView) findViewById(R.id.textView);
41+
42+
btn.setOnClickListener(new View.OnClickListener() {
43+
@Override
44+
public void onClick(View view) {
45+
doSomeWork();
46+
}
47+
});
48+
}
49+
50+
/* whenever a new item is emitted by the source Observable, it will unsubscribe to and stop
51+
* mirroring the Observable that was generated from the previously-emitted item,
52+
* and begin only mirroring the current one.
53+
*
54+
* Result: 5x
55+
*/
56+
private void doSomeWork() {
57+
getObservable()
58+
.switchMap(new Function<Integer, ObservableSource<String>>() {
59+
@Override
60+
public ObservableSource<String> apply(Integer integer) {
61+
int delay = new Random().nextInt(2);
62+
63+
return Observable.just(integer.toString() + "x")
64+
.delay(delay, TimeUnit.SECONDS, Schedulers.io());
65+
}
66+
})
67+
.subscribeOn(Schedulers.io())
68+
.observeOn(AndroidSchedulers.mainThread())
69+
.subscribe(getObserver());
70+
}
71+
72+
private Observable<Integer> getObservable() {
73+
return Observable.just(1, 2, 3, 4, 5);
74+
}
75+
76+
private Observer<String> getObserver() {
77+
return new Observer<String>() {
78+
@Override
79+
public void onSubscribe(Disposable d) {
80+
Log.d(TAG, " onSubscribe : " + d.isDisposed());
81+
}
82+
83+
@Override
84+
public void onNext(String value) {
85+
textView.append(" onNext : value : " + value);
86+
textView.append(AppConstant.LINE_SEPARATOR);
87+
Log.d(TAG, " onNext value : " + value);
88+
}
89+
90+
@Override
91+
public void onError(Throwable e) {
92+
textView.append(" onError : " + e.getMessage());
93+
textView.append(AppConstant.LINE_SEPARATOR);
94+
Log.d(TAG, " onError : " + e.getMessage());
95+
}
96+
97+
@Override
98+
public void onComplete() {
99+
textView.append(" onComplete");
100+
textView.append(AppConstant.LINE_SEPARATOR);
101+
Log.d(TAG, " onComplete");
102+
}
103+
};
104+
}
105+
}

app/src/main/res/layout/activity_operators.xml

+7
Original file line numberDiff line numberDiff line change
@@ -225,5 +225,12 @@
225225
android:text="@string/delay"
226226
android:textColor="@android:color/black" />
227227

228+
<Button
229+
android:layout_width="match_parent"
230+
android:layout_height="wrap_content"
231+
android:onClick="startSwitchMapActivity"
232+
android:text="@string/switch_map"
233+
android:textColor="@android:color/black" />
234+
228235
</LinearLayout>
229236
</ScrollView>

app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@
4242
<string name="rx_bus">RxBus</string>
4343
<string name="compose">Compose for reusable</string>
4444
<string name="result">Result</string>
45+
<string name="switch_map">Switch Map</string>
4546
</resources>

0 commit comments

Comments
 (0)