- Learning RxJava
- Thomas Nield
- 300字
- 2021-07-02 22:22:57
distinctUntilChanged()
The distinctUntilChanged() function will ignore duplicate consecutive emissions. It is a helpful way to ignore repetitions until they change. If the same value is being emitted repeatedly, all the duplicates will be ignored until a new value is emitted. Duplicates of the next value will be ignored until it changes again, and so on. Observe the output for the following code to see this behavior in action:
import io.reactivex.Observable;
public class Launcher {
public static void main(String[] args) {
Observable.just(1, 1, 1, 2, 2, 3, 3, 2, 1, 1)
.distinctUntilChanged()
.subscribe(i -> System.out.println("RECEIVED: " + i));
}
}
The output of the preceding code snippet is as follows:
RECEIVED: 1
RECEIVED: 2
RECEIVED: 3
RECEIVED: 2
RECEIVED: 1
We first receive an emission of 1, which is allowed forward. But the next two 1 are ignored because they are consecutive duplicates. When it switches to 2, that initial 2 is emitted, but the following duplicate is ignored. A 3 is emitted and its following duplicate is ignored as well. Finally, we switch back to a 2 that emits and then a 1 whose duplicate is ignored.
Just like distinct(), you can provide an optional argument for a key through a lambda mapping. In the following code snippet, we execute the distinctUntilChanged() operation with strings keyed on their lengths:
import io.reactivex.Observable;
public class Launcher {
public static void main(String[] args) {
Observable.just("Alpha", "Beta", "Zeta", "Eta", "Gamma",
"Delta")
.distinctUntilChanged(String::length)
.subscribe(i -> System.out.println("RECEIVED: " + i));
}
}
The output of the preceding code snippet is as follows:
RECEIVED: Alpha
RECEIVED: Beta
RECEIVED: Eta
RECEIVED: Gamma
Note that Zeta was skipped because it comes right after Beta, which also is four characters. Delta is ignored as well because it follows Gamma, which is five characters as well.
- 程序員修煉之道:程序設(shè)計(jì)入門30講
- JSP網(wǎng)絡(luò)編程(學(xué)習(xí)筆記)
- 自制編譯器
- Python數(shù)據(jù)分析(第2版)
- 你不知道的JavaScript(中卷)
- Swift 4 Protocol-Oriented Programming(Third Edition)
- ASP.NET程序開發(fā)范例寶典
- Practical Game Design with Unity and Playmaker
- Mastering Embedded Linux Programming
- Three.js權(quán)威指南:在網(wǎng)頁上創(chuàng)建3D圖形和動(dòng)畫的方法與實(shí)踐(原書第4版)
- AngularJS by Example
- Developing RESTful Web Services with Jersey 2.0
- HTML+CSS+JavaScript前端開發(fā)(慕課版)
- 零基礎(chǔ)輕松學(xué)Java
- Visual C#網(wǎng)絡(luò)編程