斐波納契僅僅是一個更普遍問題的簡單例子,下一個元素依賴於前一個元素。 https://github.com/ReactiveX/RxJava/wiki/Problem-Solving-Examples-in-RxJava提供了一些不錯的方法來做到這一點,但他們仍然有點哈克。 generate()也是推薦的,但在RxJava 1中不可用。如何使用RxJava 1生成Fibonacci序列?
有什麼可以做到這一點的替代方法?是否有相當於generate()?
斐波納契僅僅是一個更普遍問題的簡單例子,下一個元素依賴於前一個元素。 https://github.com/ReactiveX/RxJava/wiki/Problem-Solving-Examples-in-RxJava提供了一些不錯的方法來做到這一點,但他們仍然有點哈克。 generate()也是推薦的,但在RxJava 1中不可用。如何使用RxJava 1生成Fibonacci序列?
有什麼可以做到這一點的替代方法?是否有相當於generate()?
final int number = 9;
// [0,] 1, 1, 2, 3, 5, 8, 13, 21, 34
final Observable<Integer> fibonacci = Observable.just(0).repeat().scan(new Pair<Integer, Integer>(0, 1), new Func2<Pair<Integer, Integer>, Integer, Pair<Integer, Integer>>() {
@Override
public Pair<Integer, Integer> call(Pair<Integer, Integer> pair, Integer integer) {
// Log.d(String.format("pair: %s, int: %s", pair, integer));
int lhs = pair.getValue();
int rhs = pair.getKey() + lhs;
return new Pair<Integer, Integer>(lhs, rhs);
}
}).map(new Func1<Pair<Integer, Integer>, Integer>() {
@Override
public Integer call(Pair<Integer, Integer> pair) {
// Log.d(String.format("map: %s", pair));
return pair.getValue();
}
});
final List<Integer> result = fibonacci.take(number).toList().toBlocking().single();
Log.d(String.format("%s", result));
Downvoted?我相信它的確回答了「如何使用RxJava 1生成斐波納契數列?」的問題。 –
我沒有downvote它,但是這是一個例子在https://github.com/ReactiveX/RxJava/wiki/Problem-Solving-Examples-in-RxJava,我沒有要求。 –
爲什麼要用RxJava來做到這一點?你爲什麼想爲你創建這個問題?這看起來不像現實生活中的問題。 –
爲什麼選擇RxJava?因爲它沒有管理狀態,所以我們可以輕鬆地將此操作發送到後臺線程。這是一個真正的問題。如果實現服務器從時間戳發送新數據到客戶端,則必須在網絡請求中包含先前響應的時間戳。這將使下一個請求取決於先前的請求時間戳。 –
1.x中有'SyncOnSubscribe'用於此目的。 – akarnokd