- 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.
- 精通Nginx(第2版)
- 解構產品經理:互聯網產品策劃入門寶典
- Python for Secret Agents:Volume II
- Cocos2d-x游戲開發:手把手教你Lua語言的編程方法
- JavaFX Essentials
- Dependency Injection in .NET Core 2.0
- Android 7編程入門經典:使用Android Studio 2(第4版)
- JavaScript前端開發與實例教程(微課視頻版)
- INSTANT CakePHP Starter
- Mastering Unity Shaders and Effects
- PhoneGap Mobile Application Development Cookbook
- Extending Puppet(Second Edition)
- Android系統級深入開發
- MySQL入門很輕松(微課超值版)
- 大話Java:程序設計從入門到精通