RxJava2 Flowable defaultIfEmpty(条件操作符)

defaultIfEmpty

目录

1 defaultIfEmpty接口

2 defaultIfEmpty图解说明

3 defaultIfEmpty测试用例

4 defaultIfEmpty实用场景


 

1 defaultIfEmpty接口

Flowable<T> defaultIfEmpty(T defaultItem)

Returns a Flowable that emits the items emitted by the source Publisher or a specified default item if the source Publisher is empty.

返回一个Flowable,它发出源Publisher发出的项或源Publisher为空时指定的默认项。

 

2 defaultIfEmpty图解说明

RxJava2 Flowable defaultIfEmpty(条件操作符)

上面一条线代表源Publisher不发射数据,直接调用了完成接口,通过DefaultIfEmpty接口返回一个新的Flowable,它会发射一个默认的值

 

 

3 defaultIfEmpty测试用例

    @Test
    public void defaultIfEmpty() {
        System.out.println("######defaultIfEmpty#####");
        Flowable.just("李晓明", "张宝庆", "赵无极")
                .defaultIfEmpty("请输入姓名")
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String value) throws Exception {
                        System.out.println("value = " + value);
                    }
                });

        System.out.println("#如果Flowable为空时#");
        Flowable.empty()
                .defaultIfEmpty("请输入姓名")
                .subscribe(new Consumer<Object>() {
                    @Override
                    public void accept(Object o) throws Exception {
                        System.out.println("o = " + o);
                    }
                });
    }


测试结果
######defaultIfEmpty#####
value = 李晓明
value = 张宝庆
value = 赵无极
#如果Flowable为空时#
o = 请输入姓名

上面的测试用例,当发出的值不为空的时候是看不出来有什么不同的,当Flowable为空的时候,发射了一个默认的值“请输入姓名”,这里就很有用了;

 

4 defaultIfEmpty实用场景

比如在长链接中,在没有数据的时候,定时发送心跳包给服务器,心跳包的数据是固定的默认数据。

 

其他操作符

delay delaySubscription(辅助操作符)

switchIfEmpty(条件操作符)

debounce(过滤操作符)去重复操作

count(统计操作符)

contains(条件操作符)

concatWith(连接操作符)

concatMap(变换操作符)

collect & collectInto

cast

cache

buffer