如何使用RxJava 1生成Fibonacci序列?

时间:2017-08-25 06:18:47

标签: android rx-java fibonacci

Fibonacci只是一个更普遍的问题的简单例子,其中下一个元素取决于之前的元素。 https://github.com/ReactiveX/RxJava/wiki/Problem-Solving-Examples-in-RxJava提供了一些很好的方法,但它们仍然有点hacky。还建议使用generate(),但在RxJava 1中不可用。

这可能是另一种方法吗?是否等同于generate()

1 个答案:

答案 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));