王学岗RxJava(十五)——map,flatmap等交换方法
来源:互联网 发布:appium ios python 编辑:程序博客网 时间:2024/06/07 16:40
看下我们在十四中提到过的过滤方法
还有很多方法我就不一一更新了,大家可以去我推荐的那两篇文章里面找。
我们现在有这样的一个需求,打印输出一组用户名;我们先看下传统的方法怎么实现
看下User类,非常简单
package com.example.acer.rxjavatest;/** * @author w_x_g * @time 2016/11/14 9:50 * @note ${TODO} */public class User { private String name; private String id; public User(String name, String id) { this.name = name; this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.util.ArrayList;import java.util.List;import rx.Observable;import rx.Observer;//需求,打印一组用户名public class MainActivity extends AppCompatActivity { private List<User> mUserList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDate(); } private void initDate() { mUserList = new ArrayList<>(); for(int i=0;i<6;i++){ mUserList.add(new User("张欣"+i,String.valueOf(i)));} Observable.from(mUserList).subscribe(new Observer<User>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(User user) { Log.i("zhang_xin",user.getName()); } }); } }
看下运行效果:
下面我们使用map()把User对象转化为String对象
package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.util.ArrayList;import java.util.List;import rx.Observable;import rx.functions.Action1;import rx.functions.Func1;//需求,打印一组用户名public class MainActivity extends AppCompatActivity { private List<User> mUserList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDate(); } private void initDate() { mUserList = new ArrayList<>(); for(int i=0;i<6;i++){ mUserList.add(new User("张欣"+i,String.valueOf(i)));} //User:使我们原本的类型,String使我们要转换成的类型 Observable.from(mUserList).map(new Func1<User, String>() { @Override public String call(User user) { //这里返回的值就是aaa处要打印的值 return user.getName(); } }).subscribe(new Action1<String>() { @Override public void call(String s) { //aaa Log.i("zhang_xin","转换之后的值:"+s); } }); } }
看下运行效果:
现在我们又增加了新的需求:User里面我们需要存放订单列表,这个时候我需要打印订单单号;
首先我们增加OrderModel类并在User类里面增加订单号这一成员变量;
OrderModel类:
package com.example.acer.rxjavatest;/** * @author w_x_g * @time 2016/11/14 10:39 * @note ${TODO} */public class OrderModel { private String orderId; private String orderName; public OrderModel(String orderId, String orderName) { this.orderId = orderId; this.orderName = orderName; } public String getOrderId() { return orderId; } public void setOrderId(String orderId) { this.orderId = orderId; } public String getOrderName() { return orderName; } public void setOrderName(String orderName) { this.orderName = orderName; }}
User类
package com.example.acer.rxjavatest;import java.util.List;/** * @author w_x_g * @time 2016/11/14 9:50 * @note ${TODO} */public class User { private String name; private String id; private List<OrderModel> orderList; public List<OrderModel> getOrderList() { return orderList; } public void setOrderList(List<OrderModel> orderList) { this.orderList = orderList; } public User(String name, String id, List<OrderModel> orderList) { this.name = name; this.id = id; this.orderList = orderList; } public User(String name, String id) { this.name = name; this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
我们使用map方法进行转换:
package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.util.ArrayList;import java.util.List;import rx.Observable;import rx.functions.Action1;import rx.functions.Func1;//需求,打印一组用户名public class MainActivity extends AppCompatActivity { private List<User> mUserList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDate(); } private void initDate() { mUserList = new ArrayList<User>(); for(int i=0;i<6;i++){ User user=new User("user_id"+i,"user_name"+i); List<OrderModel> orderList=new ArrayList<OrderModel>(); for(int j=0;j<5;j++){ OrderModel orderModel=new OrderModel("User_id:"+i+",Order_id:"+j,"User_id:"+i+",Order_Name:"+j); orderList.add(orderModel); } user.setOrderList(orderList); mUserList.add(user); } //User:使我们原本的类型,List<OrderModel>使我们要转换成的类型 Observable.from(mUserList).map(new Func1<User, List<OrderModel>>() { @Override public List<OrderModel> call(User user) { //这里返回的值就是aaa处要打印的值 return user.getOrderList(); } }).subscribe(new Action1<List<OrderModel>>() { @Override public void call(List<OrderModel> s) { //aaa //这里需要遍历,才能转化为String类型 for(OrderModel o:s){ Log.i("zhang_xin",o.getOrderId()); } } }); } }
看先打印输出效果
我们使用flatmap()方法,不需要遍历就可以转化为String类型
package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.util.ArrayList;import java.util.List;import rx.Observable;import rx.functions.Action1;import rx.functions.Func1;//需求,打印一组用户名public class MainActivity extends AppCompatActivity { private List<User> mUserList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDate(); } private void initDate() { mUserList = new ArrayList<User>(); for(int i=0;i<6;i++){ User user=new User("user_id"+i,"user_name"+i); List<OrderModel> orderList=new ArrayList<OrderModel>(); for(int j=0;j<5;j++){ OrderModel orderModel=new OrderModel("User_id:"+i+",Order_id:"+j,"User_id:"+i+",Order_Name:"+j); orderList.add(orderModel); } user.setOrderList(orderList); mUserList.add(user); } //User:使我们原本的类型,转换成的类型我们使用Observable Observable.from(mUserList).flatMap(new Func1<User, Observable<OrderModel>>() { @Override public Observable<OrderModel> call(User user) { return Observable.from(user.getOrderList()); } }).subscribe(new Action1<OrderModel>() { @Override public void call(OrderModel orderModel) { Log.i("zhang_xin",orderModel.getOrderId()); } }); } }
看下打印结果:
0 0
- 王学岗RxJava(十五)——map,flatmap等交换方法
- RxJava学习经验谈——map与flatmap
- RxJava 中的map与flatMap
- rxjava小试牛刀map和flatmap
- RxJava 中的map与flatMap
- Android RxJava的使用(三)转换——map、flatMap
- 【Android】RxJava的使用(三)转换——map、flatMap
- 【Android】RxJava的使用(三)转换——map、flatMap
- 彻底了解RxJava —— flatMap()
- RxJava 处理请求嵌套-- flatMap、Map
- RxJava的学习之变换操作符—flatMap
- RxJava flatmap
- Android函数响应式编程——必学的RxJava变换操作符map、flatMap、cast、concatMap、flatMapIterable、buffer、groupBy
- spark简单操作——map flatmap filter distinct
- Stream API:filter、map和flatMap方法
- Swift 集合类型方法 map、 flatMap、filter
- flatMap Map
- RXJava map方法分析
- 面向对象葵花宝典:思想、技巧与实践(1) - 程序设计思想的发展
- Navicat连接oracle数据库
- tiledmapeditor编译成功,且正常使用
- js文件被浏览器缓存的思考
- [linux]清除缓存
- 王学岗RxJava(十五)——map,flatmap等交换方法
- android 值得收藏的demo 以及 地址
- mysql还原数据库遇到Unknown command 错误
- 1622-5 孔富晨《2016年11月13日》 【连续第44天总结】
- 数据结构(二)——单链表的概念和读取元素
- Android中的设计模式-状态模式
- J2EE十三种技术规范
- 【Day49】SQL注入攻击
- Linux开发工具学习笔记2