2017-02-21 1 views
0

Ich muss Zufallsgenerator als beobachtbar schreiben. Beobachter wird etwas mit dem nächsten Wert eine lange Zeit machen. Ich möchte also nur dann eine neue Zufallszahl ausgeben, wenn der Beobachter es möchte oder zwei zusätzliche Zahlen, aber nicht mehr.Lazy Zufallsgenerator als beobachtbar

Wie geht das?

P.S. Wenn es darauf ankommt, verwende ich Java.

Antwort

2

Sie könnten fromCallable mit repeat verwenden, um einen neuen Wert immer dann zu erhalten, wenn eine Nachfrage seitens des Verbrauchers besteht.

Zum Beispiel:

Random random = new Random(); 
Observable.fromCallable(() -> random.nextDouble()) 
.repeat() 
.map(rnd -> { 
    // do something with the random number 
    return rnd * 2; 
} 
.take(50) 
.subscribe(System.out::println); 
1

Verwenden Sie die wenig bekannte SyncOnSubscribe:

Observable 
.create(SyncOnSubscribe.createStateless(observer -> observer.onNext(random.nextDouble)) 
.map(...) 
.take(...) 
.subscribe(...) 

Dies wird mit Rückstau korrekt funktionieren.