- Learning RxJava
- Thomas Nield
- 236字
- 2021-07-02 22:22:58
startWith()
For a given Observable<T>, the startWith() operator allows you to insert a T emission that precedes all the other emissions. For instance, if we have an Observable<String>that emits items on a menu we want to print, we can use startWith() to append a title header first:
import io.reactivex.Observable;
public class Launcher {
public static void main(String[] args) {
Observable<String> menu =
Observable.just("Coffee", "Tea", "Espresso", "Latte");
//print menu
menu.startWith("COFFEE SHOP MENU")
.subscribe(System.out::println);
}
}
The output of the preceding code snippet is as follows:
COFFEE SHOP MENU
Coffee
Tea
Espresso
Latte
If you want to start with more than one emission, use startWithArray() to accept varargs parameters. If we want to add a divider between our header and menu items, we can start with both the header and divider as emissions:
import io.reactivex.Observable;
public class Launcher {
public static void main(String[] args) {
Observable<String> menu =
Observable.just("Coffee", "Tea", "Espresso", "Latte");
//print menu
menu.startWithArray("COFFEE SHOP MENU","----------------")
.subscribe(System.out::println);
}
}
The output of the preceding code snippet is as follows:
COFFEE SHOP MENU
----------------
Coffee
Tea
Espresso
Latte
The startWith() operator is helpful for cases like this, where we want to seed an initial value or precede our emissions with one or more emissions.