RxJava入门到精通

Android进阶学习RxJava(四)map和flatMap等

2020-10-22  本文已影响0人  郝大富

先介绍map概念

简单的试试怎么用

开始撸码
Observable.just(new circleMoney(), new circleMoney())
        .subscribe(new Action1<circleMoney>() {
            @Override
            public void call(circleMoney money) {
                money.SayInfo();
            }
        });

//先定义个钱币接口
public interface SquareMoney {
    void SayInfo(); //打印型号
    void SetInfo(String info); //设置型号
}

//然后使用map改造成发方钱币
Observable.just(new circleMoney(), new circleMoney())
        .map(new Func1<circleMoney, SquareMoney>() {
            @Override
            public SquareMoney call(circleMoney circleMoney) {
                //类型转换,向上转换为方形钱币
                SquareMoney circleMoney1 = (SquareMoney) circleMoney;
                //设置封装信息为方形
                circleMoney1.SetInfo("SquareMoney");
                return circleMoney1;
            }
        })
        .subscribe(new Action1<SquareMoney>() {
            @Override
            public void call(SquareMoney money) {
                //打印最终封装信息
                money.SayInfo();
            }
        });

总结

类似的操作符还有

先介绍flatMap概念

官方解释
个人理解
开始撸码
//小套娃
class SmallMatryoshka {
    private String name = "小套娃";//名字
}
//大套娃
class BigMatryoshka {
    private String name = "大套娃";//名字
    private List<SmallMatryoshka> smallMatryoshkaList;//包含小套娃的列表
}
//先创建一堆小套娃,放到List中
ArrayList<SmallMatryoshka> smallMatryoshkas = new ArrayList<>();
smallMatryoshkas.add(new SmallMatryoshka());
smallMatryoshkas.add(new SmallMatryoshka());
smallMatryoshkas.add(new SmallMatryoshka());

// 创建大套娃,并将小套娃列表放到大套娃中
BigMatryoshka bigMatryoshka = new BigMatryoshka();
bigMatryoshka.smallMatryoshkaList = smallMatryoshkas;


//大套娃列表,把大套娃放进去
List<BigMatryoshka> bigMatryoshkas = new ArrayList<BigMatryoshka>();
bigMatryoshkas.add(bigMatryoshka);
bigMatryoshkas.add(bigMatryoshka);
bigMatryoshkas.add(bigMatryoshka);

//输出大套娃列表里,大套娃包含的所有的小套娃
Observable.from(bigMatryoshkas)
        .flatMap(new Func1<BigMatryoshka, Observable<SmallMatryoshka>>() {
            @Override
            public Observable<SmallMatryoshka> call(BigMatryoshka bigMatryoshka1) {
                //转换成Observable后再次发送
                return Observable.from(bigMatryoshka1.smallMatryoshkaList);
            }
        })
        .subscribe(new Action1<SmallMatryoshka>() {
            @Override
            public void call(SmallMatryoshka smallMatryoshka) {
                //打印套娃名称
                LogUtils.e(smallMatryoshka.name);
            }
        });

总结
上一篇 下一篇

猜你喜欢

热点阅读