当前位置:   article > 正文

androidRxJava操作符(二)_flatmap cast

flatmap cast

变换操作符

变换操作符的作用是对Observable发射的数据按照一定规则做一些变换操作,然后将变换后的数据发射出去

1 map

map错左幅通过制定一个Func对象,将Observable转换为一个新的Observable对象并发射

  1. private void mapOb()
  2. {
  3. Observable.just("www.qq.com").map(new Func1<String, String>()
  4. {//拼接成新的字符串
  5. @Override
  6. public String call(String s)
  7. {
  8. return Host + "//" + s;
  9. }
  10. }).subscribe(new Action1<String>()
  11. {
  12. @Override
  13. public void call(String s)
  14. {//输出新的字符串
  15. Log.e(TAG, "map:" + s);
  16. }
  17. });
  18. }

2 flatMap、cast

flatMap操作符将Observable发射的数据集合变换成Observable集合,然后将这些Observable发射的数据平摊化地放进一个单独的Observable。cast操作符的作用是强制将Observable发射的所有数据转换为指定类型。

  1. private void flatOb()
  2. {
  3. List<String> mList = new ArrayList<>();
  4. mList.add("111111");
  5. mList.add("222222");
  6. mList.add("333333");
  7. Observable.from(mList).flatMap(new Func1<String, Observable<?>>()
  8. {
  9. @Override
  10. public Observable<?> call(String s)
  11. {//将Host循环拼接11111,2222,33333,。循环次数为size
  12. return Observable.just(Host + s);
  13. }
  14. }).cast(String.class)//强制转换的数据类型
  15. .subscribe(new Action1<String>()
  16. {
  17. @Override
  18. public void call(String s)
  19. {
  20. Log.e(TAG, "flag:" + s);//输出拼接结果
  21. }
  22. });
  23. }

3 concatMap

concatMao操作符与flag操作符一致,不过,他解决了flatMap交叉问题,提供了一种能够把发射的值连续在一起的函数,而不是合并他们。

  1. private void caoncatOb()
  2. {
  3. final List<String> mList = new ArrayList<>();
  4. mList.add("111111");
  5. mList.add("222222");
  6. mList.add("333333");
  7. Observable.from(mList).concatMap(new Func1<String, Observable<?>>()
  8. {
  9. @Override
  10. public Observable<?> call(String s)
  11. {
  12. return Observable.just(Host + s);
  13. }
  14. }).cast(String.class)
  15. .subscribe(new Action1<String>()
  16. {
  17. @Override
  18. public void call(String s)
  19. {
  20. Log.e(TAG, "caoncat:" + s);//输出拼接结果
  21. }
  22. });
  23. }

5 buffer 

buffer操作符将源Observable变换为一个新的Observable,这个新的Observable每次发射一组列表值而不是一个一个发射。和buffer操作弗雷斯的还有window操作符,只不过window操作符发射的是Observable而不是数据列表,

  1. private void bufferOb()
  2. {
  3. Observable.just(1, 2, 3, 5, 6, 7)
  4. .buffer(3)//缓存为3 每次发送三个
  5. .subscribe(new Action1<List<Integer>>()
  6. {
  7. @Override
  8. public void call(List<Integer> integers)
  9. {
  10. for (Integer i : integers)
  11. {
  12. Log.e(TAG, "buffer:" + i);//输出拼接结果
  13. }
  14. Log.e(TAG, "------------------------");//输出拼接结果
  15. }
  16. });
  17. }

6 window

window用法与buffer相似,buffer发射的是一个集合列表,window发射的是一个Observable

  1. private void windowOb()
  2. {
  3. Observable.just(1, 2, 3, 5, 6, 7)
  4. .window(3)
  5. .subscribe(new Action1<Observable<Integer>>()
  6. {
  7. @Override
  8. public void call(Observable<Integer> integerObservable)
  9. {
  10. integerObservable.subscribe(new Action1<Integer>()
  11. {
  12. @Override
  13. public void call(Integer integer)
  14. {
  15. Log.e(TAG, "window:" + integer);//输出拼接结果
  16. }
  17. });
  18. }
  19. });
  20. }

7 groupBy

groupBy操作符用于分组元素,将源Observable变换成一个发射Observable的新Observable(分组后的)他们中的每一个新Observable都发射一组特定的数据。

  1. private void grouupBy()
  2. {
  3. Swordsman s1 = new Swordsman("1", "A");
  4. Swordsman s2 = new Swordsman("2", "SS");
  5. Swordsman s3 = new Swordsman("3", "S");
  6. Swordsman s4 = new Swordsman("4", "S");
  7. Swordsman s5 = new Swordsman("5", "A");
  8. Swordsman s6 = new Swordsman("6", "SS");
  9. Swordsman s7 = new Swordsman("7", "S");
  10. Swordsman s8 = new Swordsman("8", "A");
  11. Observable<GroupedObservable<String, Swordsman>> groupedObservableObservable
  12. = Observable.just(s1, s2, s3, s4, s5, s6, s7, s8)
  13. .groupBy(new Func1<Swordsman, String>()
  14. {
  15. @Override
  16. public String call(Swordsman swordsman)
  17. {
  18. return swordsman.getLevel();//将相同等级的进行分组
  19. }
  20. });
  21. Observable.concat(groupedObservableObservable)
  22. .subscribe(new Action1<Swordsman>()
  23. {
  24. @Override
  25. public void call(Swordsman swordsman)
  26. {
  27. Log.e(TAG, "grouupBy:" + swordsman.getName() + "/-----/" + swordsman.getLevel());//输出拼接结果 ;
  28. }
  29. });
  30. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号