RxJava操作符实践:3_转换操作之_toMap

一、描述

toMap 可以把所有数据收集起来 转成一个map;

二、示意图

二、示例代码

这个方法 可以设置你想要 map中的key 和map的value是什么类型和值 ,可以还可以追加map的数量
 


List<StudentToMultiMap> mapList = new ArrayList<>();
StudentToMultiMap stu1 = new StudentToMultiMap(1001, "ZhangSan");
StudentToMultiMap stu2 = new StudentToMultiMap(1002, "LiSi");
mapList.add(stu1);
mapList.add(stu2);
Observable.just(stu1).toMap(new Func1<StudentToMultiMap, String>() {
    @Override
    public String call(StudentToMultiMap molKey) { 
        return molKey.getId()+"";
    }
}, new Func1<StudentToMultiMap, String>() {
    @Override
    public String call(StudentToMultiMap mapValue) {
        return mapValue.getName();
    }
}, new Func0<Map<String, String>>() {
    @Override
    public Map<String, String> call() {
        Map<String, String> stringMap =new HashMap<String, String>();
        stringMap.put("1","2");//key 会覆盖
        stringMap.put("2","3");
        stringMap.put("1","4");
        return stringMap;
    }
}).subscribe(new Action1<Map<String, String>>() {
    @Override
    public void call(Map<String, String> map) {
        LogUtils.e(TAG,"RxAgain.call."+map.toString());
        LogUtils.e(TAG,"RxAgain.call."+map.size());
    }
});
 
f
 

四、运行结果

{1001=ZhangSan, 1=2}
{1001=ZhangSan, 1=4, 2=3}
           3 个

示例代码 :
  value 是一个对象 ,我们可以随意指定类型
 
List<StudentMol> mapList = new ArrayList<>();
StudentMol stu1 = new StudentMol(1001, "ZhangSan");
final StudentMol stu2 = new StudentMol(1002, "LiSi");
mapList.add(stu1);
mapList.add(stu2);

Observable.from(mapList).toMap(new Func1<StudentMol, String>() {
    @Override
    public String call(StudentMol molKey) {
        return molKey.getId() + "";
    }
}, new Func1<StudentMol, StudentMol>() {
    @Override
    public StudentMol call(StudentMol studentMolVlaue) {
        //这里会循环过来
        if (studentMolVlaue.id == 1002) {
         studentMolVlaue.name="张三";
        } else if (studentMolVlaue.id == 1001) {
            studentMolVlaue.name="李四";
        }
        return studentMolVlaue;
    }
}, new Func0<Map<String, StudentMol>>() {
    @Override
    public Map<String, StudentMol> call() {
        Map<String, StudentMol> hashMap = new HashMap<String, StudentMol>();
        StudentMol stu3 = new StudentMol(1001, "小刘");
        hashMap.put("1003",stu3);
        return hashMap;
    }
}).subscribe(new Action1<Map<String, StudentMol>>() {
    @Override
    public void call(Map<String, StudentMol> map) {
        LogUtils.e(TAG, "RxAgain.call." + map.toString());
            LogUtils.e(TAG, "RxAgain.call." + map.size());
    }
});

运行结果 :
{1001=Student{id=1001, name='李四'}, 1003=Student{id=1001, name='小刘'}, 1002=Student{id=1002, name='张三'}}
数量 3个
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值