- Learning RxJava
- Thomas Nield
- 347字
- 2021-07-02 22:22:56
take()
The take() operator has two overloads. One will take a specified number of emissions and then call onComplete() after it captures all of them. It will also dispose of the entire subscription so that no more emissions will occur. For instance, take(3) will emit the first three emissions and then call the onComplete() event:
import io.reactivex.Observable;
public class Launcher {
public static void main(String[] args) {
Observable.just("Alpha", "Beta", "Gamma", "Delta", "Epsilon")
.take(3)
.subscribe(s -> System.out.println("RECEIVED: " + s));
}
}
The output of the preceding code snippet is as follows:
RECEIVED: Alpha
RECEIVED: Beta
RECEIVED: Gamma
Note that if you receive fewer emissions than you specify in your take() function, it will simply emit what it does get and then call the onComplete() function.
The other overload will take emissions within a specific time duration and then call onComplete(). Of course, our cold Observable here will emit so quickly that it would serve as a bad example for this case. Maybe a better example would be to use an Observable.interval() function. Let's emit every 300 milliseconds, but take()emissions for only 2 seconds in the following code snippet:
import io.reactivex.Observable;
import java.util.concurrent.TimeUnit;
public class Launcher {
public static void main(String[] args) {
Observable.interval(300, TimeUnit.MILLISECONDS)
.take(2, TimeUnit.SECONDS)
.subscribe(i -> System.out.println("RECEIVED: " + i));
sleep(5000);
}
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
The output of the preceding code snippet is as follows:
RECEIVED: 0
RECEIVED: 1
RECEIVED: 2
RECEIVED: 3
RECEIVED: 4
RECEIVED: 5
You will likely get the output that's shown here (each print happening every 300 milliseconds). You can only get six emissions in 2 seconds if they are spaced out by 300 milliseconds.
Note that there is also a takeLast() operator, which will take the last specified number of emissions (or time duration) before the onComplete() function is called. Just keep in mind that it will internally queue emissions until its onComplete() function is called, and then it can logically identify and emit the last emissions.
- Learn ECMAScript(Second Edition)
- Python入門很簡單
- Visual FoxPro程序設計教程
- AIRAndroid應用開發實戰
- Elastic Stack應用寶典
- 編譯系統透視:圖解編譯原理
- Mastering macOS Programming
- GeoServer Beginner's Guide(Second Edition)
- C語言程序設計學習指導與習題解答
- Hands-On Automation Testing with Java for Beginners
- Linux Device Drivers Development
- Web Development with MongoDB and Node(Third Edition)
- HTML+CSS+JavaScript網頁設計從入門到精通 (清華社"視頻大講堂"大系·網絡開發視頻大講堂)
- Raspberry Pi Robotic Blueprints
- Python趣味編程與精彩實例