- 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.
- AngularJS Testing Cookbook
- Python科學計算(第2版)
- C++面向對象程序設計(微課版)
- 三維圖形化C++趣味編程
- INSTANT MinGW Starter
- Jupyter數據科學實戰
- 深入剖析Java虛擬機:源碼剖析與實例詳解(基礎卷)
- Java零基礎實戰
- Deep Learning with R Cookbook
- Learning VMware vSphere
- Django Design Patterns and Best Practices
- 軟件工程與UML案例解析(第三版)
- INSTANT Apache ServiceMix How-to
- Java 9 with JShell
- Building a Media Center with Raspberry Pi