RXjava创建函数

如何创建一个Observable 被观察者对象 一共有11个函数 create,just,from,defer,repeat ,interval,timer,range,empty,error,

(1)create函数

创建

您可以使用Create 运算符从头创建Observable 。Observable 有 OnNext OnError OnComplete OnNext 可以发送多次,观察者执行多次。 OnComplete 只能发送一次 发送之后 在次发送 onNext 则不会生效  OnError 只能调用一次 发送错误事件,如果使用retry()函数捕获这个错误,否则事件流全部停止执行。

public class RxJavaCreate {
    public static void main(String[] args) {
        Observable.<Integer>create(observableEmitter->{
            try{
                if(!observableEmitter.isDisposed()){
                    for (int i=0;i<4;i++){
                        observableEmitter.onNext(i);
                        if(i==2){
                            observableEmitter.onError(new Exception("heihei"));
                        }
                    }
                    observableEmitter.onComplete();
                }
            }catch (Exception e){
                observableEmitter.onError(e);
            }
        }).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                System.out.println("Observer.onSubscribe");

            }

            @Override
            public void onNext(Integer integer) {
                System.out.println("Observer.onNext  "+integer);

            }

            @Override
            public void onError(Throwable e) {
                System.out.println("Observer.onError "+e);

            }

            @Override
            public void onComplete() {
                System.out.println("Observer.onComplete");

            }
        });
    }
}
Observer.onSubscribe
Observer.onNext  0
Observer.onNext  1
Observer.onNext  2
Observer.onError java.lang.Exception: heihei

2 just函数

只是

public class RxJavaJust {

    public static void main(String[] args) {
        //just函数创建被观察者,最多发送10个数据项,要求数据项类型一致
        Observable.just("zhangsan", "lisi", "wangwu", "zhaoliu", "xieguangkun").subscribe(System.out::println);
    }
}
zhangsan
lisi
wangwu
zhaoliu
xieguangkun

3、from

将各种其他对象和数据类型转换为Observable 支持 集合、数组、Runable、Callable、Action、Future

从

package rxjava;

import io.reactivex.Completable;
import io.reactivex.Observable;
import io.reactivex.functions.Action;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.*;

public class RxJavaFrom {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>(Arrays.asList("zhangsan","lisi","wangwu"));
        Observable.fromIterable(list).subscribe(System.out::println);
        System.out.println("----------------");
        String[] array=new String[]{"zhangsan","lisi","wangwu"};
        Observable.fromArray(array).subscribe(System.out::println);
        System.out.println("----------------");
        //线程允许有返回值
        Callable<String> callable=()->{
            return "zhangsan";
        };
        Observable.fromCallable(callable).subscribe(System.out::println);
        System.out.println("----------------");
        //线程不允许有返回值,不允许抛出异常
        Runnable runnable= ()->{
          System.out.println("zhangsan");
        };
        Completable.fromRunnable(runnable).subscribe(()->System.out.println("runnable"));
        System.out.println("----------------");
        //action接口允许抛出异常
        Action action=()->{
            System.out.println("zhangsan");
//            throw  new Exception("heihie");
        };
        Completable.fromAction(action).subscribe(()->System.out.println("action"));
        System.out.println("----------------");
        ScheduledExecutorService executorService= Executors.newSingleThreadScheduledExecutor();
        Future<String> future=executorService.schedule(()->"zhangsan",1, TimeUnit.SECONDS);
        Observable.fromFuture(future).subscribe(System.out::println);
        executorService.shutdown();
    }
}
zhangsan
lisi
wangwu
----------------
zhangsan
lisi
wangwu
----------------
zhangsan
----------------
zhangsan
runnable
----------------
zhangsan
action
----------------
zhangsan

(4)repeat

创建可多次发出特定项目的Observable

重复

在重复操作多次发出的一个项目

import io.reactivex.Observable;

public class RxjavaRepeat {

    public static void main(String[] args) {
        Observable.just("zhangsan").repeat(5).subscribe(System.out::println);
    }
}
zhangsan
zhangsan
zhangsan
zhangsan
zhangsan

5、defer

在观察者订阅之前不要创建Observable,并为每个观察者创建一个新的Observable

推迟

package rxjava;


import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

import static java.lang.Thread.sleep;

public class RxjavaDefer {
    public static void main(String[] args) {
        //defer会等待直到观察者订阅它才会创建。defer能够为每一个观察者创建一个独立的被观察者。
        Observable<Long> observable=Observable.defer(()->{
            long systime=System.currentTimeMillis();
            Observable observable1=Observable.just(systime);
            System.out.println("heihei "+observable1);
            return observable1;
        });

        observable.subscribe(new Observer<Long>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Long aLong) {
                System.out.println(aLong);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
        System.out.println(observable.toString());
        try {
            sleep(1000);
        } catch (InterruptedException e) {
        }
        observable.subscribe(new Observer<Long>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Long aLong) {
                System.out.println(aLong);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });

        System.out.println(observable.toString());

    }
}
heihei io.reactivex.internal.operators.observable.ObservableJust@27ddd392
1613894953060
io.reactivex.internal.operators.observable.ObservableDefer@555590
heihei io.reactivex.internal.operators.observable.ObservableJust@6d1e7682
1613894954065
io.reactivex.internal.operators.observable.ObservableDefer@555590

6 interval

创建一个Observable,它发出以给定时间间隔间隔的整数序列

间隔

http://reactivex.io/documentation/operators/interval.html

该间隔符返回一个可观察发出的递增整数的无限序列,与排放之间你选择的时间恒定的间隔。

package rxjava;

import io.reactivex.Observable;

import java.util.concurrent.TimeUnit;

public class RxjavaInterval {
    public static void main(String[] args) throws InterruptedException {
        Observable.interval(3, TimeUnit.SECONDS).subscribe(System.out::println);

        Thread.sleep(100000);
    }
}
0
1
2
3

7 timer

创建一个Observable,它在给定的延迟后发出特定的项目

计时器

该定时器操作创建一个可观察的是在您指定的时间跨度后,发射一种特定的项目。

package rxjava;


import io.reactivex.Observable;

import java.util.concurrent.TimeUnit;

public class RxjavaTimer {

    public static void main(String[] args) throws InterruptedException {
        Observable.timer(1, TimeUnit.SECONDS).subscribe(v->System.out.println("zhangsan"));

        Thread.sleep(2000);
    }
}
zhangsan

8 range

创建一个Observable,它发出特定范围的连续整数

范围

该范围运营商发出了一系列的连续整数

public class RxjavaRange {
    public static void main(String[] args) {
        Observable.range(1,4).subscribe(x->System.out.println(x));
        Observable.rangeLong(200,5).subscribe(x->System.out.println(x));
    }
}
1
2
3
4
200
201
202
203
204

9 empty 创建一个空的不发射任何数据的Observale

package rxjava;


import io.reactivex.Observable;

public class RxjavaEmpty {
    public static void main(String[] args) throws InterruptedException {
        //不发出任何数据 因此也不会接收到zhangsan数据
        Observable.empty().subscribe(x->System.out.println("zhangsan"));
        Thread.sleep(1000);
    }
}

10 error 创建一个立即发送error的Observale

package rxjava;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class RxjavaError {
    public static void main(String[] args) {
        Observable.error(new Exception("heihie")).subscribe(new Observer<Object>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Object o) {

            }

            @Override
            public void onError(Throwable e) {
                System.out.println(e);
            }

            @Override
            public void onComplete() {

            }
        });
    }
}
java.lang.Exception: heihie

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值