有一串随机数。
rx.Observable
.range (0, 1000)
.map (() -> 200d * Math.random ())
我需要将流程分成两部分。数字小于100且数字超过100。
之后,对于小于100的数字(chain1):
我需要对网络执行request1
,等待答案并继续其他运营商的流程链1。
对于超过100的数字(chain2):
我必须发送另一个request2
,等待答案并继续进行流程链操作。
request1
和request2
不会互相等待,链并行执行。但在链中,处理必须等待对请求的响应。
怎么做?
答案 0 :(得分:0)
rx.Observable
.create(subscriber -> {
for (int i = 0; i < 100; i++) {
subscriber.onNext(i);
Log.i("Iniop", "Create thread name: " + Thread.currentThread().getName());
}
subscriber.onCompleted();
})
.onBackpressureBuffer()
.observeOn(Schedulers.computation())
.subscribeOn(Schedulers.computation())
.map(v -> {
Log.i("Iniop", "Map thread name: " + Thread.currentThread().getName());
return 200d * Math.random();
})
.groupBy(k -> {
Log.i("Iniop", "Group thread name: " + Thread.currentThread().getName());
return k > 100 ? "yes" : "no";
}
, v -> v)
.forEach(gO -> gO.observeOn(Schedulers.newThread())
.map(v -> new Pair<String, Double>(gO.getKey(), v))
.subscribe(v -> {
Log.i("Iniop", "Key: " + v.first);
Log.i("Iniop", "Value: " + v.second);
Log.i("Iniop", "Thread name: " + Thread.currentThread().getName());
}
, e -> Log.e("Iniop", "Err", e))
, e -> Log.e("Iniop", "Err", e));