package com.packt.learnjava.ch15_reactive; import io.reactivex.Observable; import io.reactivex.disposables.Disposable; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; public class DisposableUsage { public static void main(String... args){ disposable1(); disposable2(); } private static void disposable2(){ Observable source = Observable.range(1,5); Disposable disposable = source.subscribe(); Observable<Integer> obs = Observable.using( () -> disposable, r -> source, r -> System.out.println("Disposed: " + r) //prints: Disposed: DISPOSED ); List<Double> list = new ArrayList<>(); obs.filter(i -> i % 2 == 0) .doOnNext(System.out::println) //prints 2 and 4 .map(Math::sqrt) .delay(100, TimeUnit.MILLISECONDS) .subscribe(d -> { if(list.size() == 1){ list.remove(0); } list.add(d); }); System.out.println(list); //prints: [] try { TimeUnit.MILLISECONDS.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(list); //prints: [2.0] } private static void disposable1(){ Observable<Integer> obs = Observable.range(1,5); List<Double> list = new ArrayList<>(); Disposable disposable = obs.filter(i -> i % 2 == 0) .doOnNext(System.out::println) //prints 2 and 4 .map(Math::sqrt) .delay(100, TimeUnit.MILLISECONDS) .subscribe(d -> { if(list.size() == 1){ list.remove(0); } list.add(d); }); System.out.println(list); //prints: [] System.out.println(disposable.isDisposed()); //prints: false disposable.dispose(); try { TimeUnit.MILLISECONDS.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(disposable.isDisposed()); //prints: true disposable.dispose(); System.out.println(list); //prints: [2.0] } }