- Learning RxJava
- Thomas Nield
- 271字
- 2021-07-02 22:22:57
distinct()
The distinct() operator will emit each unique emission, but it will suppress any duplicates that follow. Equality is based on hashCode()/equals() implementation of the emitted objects. If we wanted to emit the distinct lengths of a string sequence, it could be done as follows:
import io.reactivex.Observable;
public class Launcher {
public static void main(String[] args) {
Observable.just("Alpha", "Beta", "Gamma", "Delta", "Epsilon")
.map(String::length)
.distinct()
.subscribe(i -> System.out.println("RECEIVED: " + i));
}
}
The output of the preceding code snippet is as follows:
RECEIVED: 5
RECEIVED: 4
RECEIVED: 7
Keep in mind that if you have a wide, diverse spectrum of unique values, distinct() can use a bit of memory. Imagine that each subscription results in a HashSet that tracks previously captured unique values.
You can also add a lambda argument that maps each emission to a key used for equality logic. This allows the emissions, but not the key, to go forward while using the key for distinct logic. For instance, we can key off each string's length and use it for uniqueness, but emit the strings rather than their lengths:
import io.reactivex.Observable;
public class Launcher {
public static void main(String[] args) {
Observable.just("Alpha", "Beta", "Gamma", "Delta", "Epsilon")
.distinct(String::length)
.subscribe(i -> System.out.println("RECEIVED: " + i));
}
}
The output of the preceding code snippet is as follows:
RECEIVED: Alpha
RECEIVED: Beta
RECEIVED: Epsilon
Alpha is five characters, and Beta is four. Gamma and Delta were ignored because Alpha was already emitted and is 5 characters. Epsilon is seven characters, and because no seven-character string was emitted yet, it was emitted forward.
- Mastering OpenLayers 3
- Python快樂編程:人工智能深度學習基礎
- Docker技術入門與實戰(第3版)
- Python Data Analysis(Second Edition)
- Python:Master the Art of Design Patterns
- 從Excel到Python:用Python輕松處理Excel數據(第2版)
- RabbitMQ Essentials
- 機器學習與R語言實戰
- Hands-On Nuxt.js Web Development
- PHP 7從零基礎到項目實戰
- 創意UI:Photoshop玩轉APP設計
- JQuery風暴:完美用戶體驗
- Arduino機器人系統設計及開發
- LabVIEW數據采集
- Yii框架深度剖析