package com.example.rx; import java.util.Arrays; import java.util.List; import rx.Observable; import rx.functions.Action1; import rx.functions.Func1; /** * Created by alanchen on 15/9/13. */ public class RxOperators { static Observable<List<String>> query() { List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift"); return Observable.just(s); } static Observable<String> addPre(String lan) { return Observable.just("addPre_" + lan); } public static void main(String[] args) { // mapOperator(); // fromOperator(); // flatMapOperator(); // otherOperator(); } private static void otherOperator() { query().flatMap(new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> strings) { return Observable.from(strings); } }).flatMap(new Func1<String, Observable<String>>() { @Override public Observable<String> call(String s) { return addPre(s); } }).filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return s.contains("a"); } }).take(3) .doOnNext(new Action1<String>() { @Override public void call(String s) { System.out.println("doOnNext:" + s); } }).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } }); } private static void flatMapOperator() { query().flatMap(new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> strings) { // 将List进行From处理 return Observable.from(strings); } }).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println("_flatMap:" + s); } }); query().flatMap(new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> strings) { return Observable.from(strings); } }).flatMap(new Func1<String, Observable<String>>() { @Override public Observable<String> call(String s) { return addPre(s); } }).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } }); } private static void fromOperator() { //它接收一个集合作为输入,然后每次输出一个元素给subscriber: final List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift"); Observable.from(s).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } }); Observable.from(new String[]{"Java", "Android"}).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println("_from:" + s); } }); } private static void mapOperator() { //操作符就是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。 //RxJava提供了很多很有用的操作符。 // map: Observable.just("Hellp Map Operator").map(new Func1<String, Integer>() { @Override public Integer call(String s) { return 2015; } }).map(new Func1<Integer, String>() { @Override public String call(Integer integer) { return String.valueOf(integer); } }).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } }); } }