Fibonacci只是一个更普遍的问题的简单例子,其中下一个元素取决于之前的元素。 https://github.com/ReactiveX/RxJava/wiki/Problem-Solving-Examples-in-RxJava提供了一些很好的方法,但它们仍然有点hacky。还建议使用generate(),但在RxJava 1中不可用。
这可能是另一种方法吗?是否等同于generate()?
答案 0 :(得分:-1)
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));