public class Test { private Map<Integer, TaskInfo> map = new HashMap<>(); private int index = 0; public void test() { List<TaskInfo> videoTests = new ArrayList<>(); for (int i = 0; i < 6; i++) { TaskInfo videoTest = new TaskInfo(); videoTest.setParams("s" + i + "s"); videoTests.add(videoTest); } Observable.fromArray(videoTests)//这里模拟请求数据集合 .flatMap(new Function<List<TaskInfo>, ObservableSource<TaskInfo>>() { @Override public ObservableSource<TaskInfo> apply(List<TaskInfo> pVideoTests) { index = 0; return Observable.fromIterable(pVideoTests);// 这里的fromIterable是一个一个发送数据 } }) //单独处理每个数据 .map(new Function<TaskInfo, String>() { @Override public String apply(TaskInfo pVideoTest) { //这里需要使用map来绑定对象跟key key可以使用integer map.put(index, pVideoTest); return pVideoTest.getParams(); } }) .map(new Function<String, String>() { @Override public String apply(String ps) { //这边处理url 应该是请求接口B 我这就简单点处理了 return ps + "处理过的"; } }) .map(new Function<String, TaskInfo>() { @Override public TaskInfo apply(String pS) { //这边应该将正确的url赋值给对应的对象 TaskInfo videoTest = map.get(index); videoTest.setParams(pS); index++; return videoTest; } }) //这个操作符是用来收集对象的 .collect(new Callable<List<TaskInfo>>() { @Override public List<TaskInfo> call() { return new ArrayList<>(); } }, new BiConsumer<List<TaskInfo>, TaskInfo>() { @Override public void accept(List<TaskInfo> pNewses, TaskInfo pNews) { pNewses.add(pNews); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<List<TaskInfo>>() { @Override public void accept(List<TaskInfo> pVideoTests) { for (TaskInfo v : pVideoTests) { Log.i("WY", "---->" + v.getParams()); } } }, new Consumer<Throwable>() { @Override public void accept(Throwable pThrowable) { Log.e("WY", pThrowable.getMessage()); } }); } }
retrofit flatmap和map
最新推荐文章于 2022-02-11 13:35:12 发布