اتكلمنا عن مقدمة لل Rx وخدنا مثال HelloWorld
لتقليل الكود المكتوب لانشاء كل من ال Observable
فممكن نستخدم مع Observable
Observable<String> myObservable =
Observable.just("Hello, world!");
Observable.just("Hello, world!");
just --> operator
بياخد مجموعة من العناصر ويرجع ObseravableSource
بيرسل كل عنصر من العناصر وبعدين يبعت Compelete
subscribe accepts a subscriber that has implementation to onNext , onError ,onComplete as next::
myObservable.subscribe(onNextAction, onErrorAction, onCompleteAction);
so we can specify all of them or just onNext, as below
Observable.just("Hello, world!")
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});
Action1 here reprsent what is shoud be done when new item is emitted (بيمثل onNext)
output:: Hello, world!
ونقدر نختصر الكود الى اقل حاجة واكثرها وظيفية
Observable.just("Hello, world!").subscribe(s -> System.out.println(s));
Observable.just("Hello, world!")
.subscribe(s -> System.out.println(s + " -User"));
هنا احنا ضفنا مع كل داتا جديدة كلمة User
لكن ده بيتم عند المشترك واللى فى الغالب بيكون في **main thread ** طب لو التعديل هيكون كبير وهياخد وقت وعايزه يصل للمشترك جاهز للاستخدام
فهني تظهر أهمية ال operator
ودي تقدر تقول عليها أدوات سحرية للتحويل والتعامل مع الداتا لتبسيطها وجعلها جاهزة للاستخدام النهائي
نتعرض لمجموعة منها وهم map , flatMap , take , filter , doOnNext
ده بيستقبل الداتا وبعدل عليها ويرجعها بشكل تاني
Observable.just("Hello, world!")
.map(new Func1<String, String>() { // Func1 accept string return string
@Override
public String call(String s) {
return s + " -User";
}
})
.subscribe(s -> System.out.println(s));
ويمكن تبسيطها عن طريق
Observable.just("Hello, world!")
.map(s -> s + " -User")
.subscribe(s -> System.out.println(s));
ويمكن أيضا تحويل ال string الى اي نوع تانى حسب الحاجة وكذلك يمكنك دمج أكثر من map مع بعض
Observable.just("Hello, world!")
.map(s -> s + " -User") // هنا ضاف على النص الناتج كلمة
.map(s -> s.hashCode()) // هنا هيحول الناتج الى رقم
.map(i -> Integer.toString(i)) // هنا يرجع تانى الرقم الى نص
.subscribe(s -> System.out.println(s)); // يعرضه ع الشاشة