본문 바로가기

프로그래밍/RxJava

[RxJava] Observable - fromArray() 함수

지금까지 단일 데이터를 이용한 예제를 다뤘다.

근데, 단일 데이터가 아닐경우에는 어떻게 해야할까?

fromXXX() 계열의 함수를 사용한다.

예전에 RxJava 1.x에서는 from()fromCallable() 함수만 사용했다.

그런데 from() 함수를 배열, 반복자, 비동기 계산 등에 모두 사용하다보니 모호함이 생겼다.

그래서 RxJava 2.x부터는 from()을 세분화 했고, 그중 하나가 지금 소개하는 fromArray() 함수이다.

 public void integerArray() {
        Integer[] arr = {100, 200, 300};
        Observable<Integer> source = Observable.fromArray(arr);
        source.subscribe(System.out::println);
    }
결과값 
100 
200 
300

Interger[] 배열에 원하는 값을 담고 Observable.fromArray()를 호출했다.

그다음 subscribe() 함수를 호출하면 데이터가 차례대로 발행된다.

참고로, 숫자 뿐만아니라, 객체도 넣을 수 있다.

여기서 주의할 점은 아래 예제와 같이 Observable.fromArray()int[] 배열은 사용할 수 없다.

private void intArrayWrong(){
        int[] intArray = {400, 500, 600};
        Observable.fromArray(intArray).subscribe(System.out::println);
    }
결과값
I@368239c8

그렇기에 int[] 배열을 Integer[] 타입으로 변경하여 사용해야한다.

 

** 자바 8의 Stream API에서는 아래와 같은 방법을 이용한다.

private static Integer[] toIntegerArray(int[] intArray){
        return IntStream.of(intArray).boxed().toArray(Integer[]::new);
    }

private void intArray(){
        int[] intArray = {400, 500, 600};
        Observable<Integer> source = Observable.fromArray(toIntegerArray(intArray));
        source.subscribe(System.out::println);
    }
결과값
400
500
600

위의 코드중에

boxed() 메서드는 int[] 배열 각각의 요소를 Integer로 변환해 Integer[] 배열의 스트림으로 만든다.

그리고 그러한 스트림을 toArray()를 통해 Integer[]배열로 만든다.

 

fromArray 함수 전체 코드 보러가기