package com.github.benjchristensen.gist; import java.util.HashMap; import rx.Observable; import rx.Subscriber; public class Fibonacci { public static void main(String... args) { // via Observable.create fib.take(13).forEach(System.out::println); // via scan Observable.range(0, 10).scan(new HashMap<String, Integer>(), (m, n) -> { Integer f1 = m.get("f1"); Integer f2 = m.get("f2"); f1 = f1 == null ? 0 : f1; f2 = f2 == null ? 1 : f2; int fn = f1 + f2; m.put("f1", f2); m.put("f2", fn); return m; }) .filter(m -> m.size() == 2) .map(m -> m.get("f1") + m.get("f2")) //.startWith(Observable.from(0, 1, 1)) .forEach(System.out::println); } static Observable<Integer> fib = Observable.create((Subscriber<? super Integer> s) -> { int f1 = 0, f2 = 1, fn; s.onNext(0); s.onNext(1); while (!s.isUnsubscribed()) { fn = f1 + f2; f1 = f2; f2 = fn; s.onNext(fn); } }); }