본문 바로가기
2023년 이전/ReativeX

RxJava,RxKotlin - all 함수

by JeongUPark 2020. 1. 19.
반응형

[출처 - RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에]

본 글은 'RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에' 를 학습하면서 정리한 글입니다

 

마블다이어그램 참고 - http://reactivex.io/RxJava/javadoc/io/reactivex/Flowable.html#all-io.reactivex.functions.Predicate-


all 함수는 주어진 조건에 100% 맞을 때만 true 값을 발행하고 조건이 맞지 않으면 false를 발행합니다.

 

마블다이어그램을 보면

모든 데이터가 원이기 때문에 true를 발행합니다.

 

testCode를 보겠습니다.(CommonUtils와 CommonUtilsk의 내용은 여기에서 확인 할 수 있습니다.)

Java

import io.reactivex.Observable;
import io.reactivex.Single;

public class all_test {

    public static void main(String[] args){

        String[] data = {"1","2","3","4"};

//        Single<Boolean> source = Observable.fromArray(data).map(all_test::getShape).all("BALL"::equals);
        Single<Boolean> source = Observable.fromArray(data).all(value -> "BALL".equals(getShape(value)));

        source.subscribe(System.out::println);

    }
    private static String getShape(String obj){
        if(obj.equals("")){
            return "NO-SHAPE";
        }
        if(obj.contains("-T")){
            return "TRIANGLE";
        }
        return "BALL";
    }
}

Kotlin

import io.reactivex.rxkotlin.toObservable

fun main(){

    val data = arrayOf("1", "2", "3", "4")

    val source = data.toObservable().map{getShape(it)}.all("BALL"::equals);
//    val source =data.toObservable().all { value -> "BALL" == getShape(value) }

    source.subscribe{it-> println(it)}

}

private fun getShape(obj: String): String {
    if (obj == "") {
        return "NO-SHAPE"
    }
    return if (obj.contains("-T")) {
        "TRIANGLE"
    } else "BALL"
}

결과

true

결과를 보면 모두 BALL이기 때문에 true 라는 것을 알 수 있습니다. 만일 String 값들 중 한개에 -T를 붙인다면

 

import io.reactivex.rxkotlin.toObservable

fun main(){

    val data = arrayOf("1", "2-T", "3", "4")

    val source = data.toObservable().map{getShape(it)}.all("BALL"::equals);
//    val source =data.toObservable().all { value -> "BALL" == getShape(value) }

    source.subscribe{it-> println(it)}

}

private fun getShape(obj: String): String {
    if (obj == "") {
        return "NO-SHAPE"
    }
    return if (obj.contains("-T")) {
        "TRIANGLE"
    } else "BALL"
}
false

가 되는것을 확인 할 수 있습니다.

반응형