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

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

主站蜘蛛池模板: 正阳县| 新乡县| 新安县| 泰宁县| 黑龙江省| 肇源县| 井研县| 长治县| 郓城县| 佳木斯市| 静乐县| 岐山县| 苏州市| 班戈县| 肥西县| 阳曲县| 岳池县| 石家庄市| 新化县| 瓮安县| 镶黄旗| 万年县| 双江| 扬州市| 长岛县| 凯里市| 大名县| 玉环县| 嘉鱼县| 鹤山市| 珠海市| 龙海市| 吉水县| 罗山县| 东莞市| 资溪县| 赤城县| 棋牌| 临西县| 泸定县| 阳信县|