官术网_书友最值得收藏!

  • 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.

主站蜘蛛池模板: 潮州市| 常熟市| 那坡县| 蒲江县| 伽师县| 滁州市| 澄迈县| 陵水| 二连浩特市| 彭阳县| 苍山县| 四子王旗| 乌兰县| 浙江省| 新乡县| 衡南县| 宝丰县| 湘阴县| 鹰潭市| 泸溪县| 潜江市| 友谊县| 青冈县| 盐津县| 桃源县| 兴城市| 黄龙县| 天峨县| 安泽县| 独山县| 新密市| 深州市| 苍梧县| 页游| 佛冈县| 承德市| 东莞市| 若羌县| 小金县| 辽阳县| 普格县|