본문 바로가기

프로그래밍/RxJava

[RxJava] Observable - fromIterable()함수

Iterable 인터페이스반복자(Iterator)를 반환한다.

Iterator 인터페이스는 이터레이터 패턴을 구현한 것으로

다음에 어떤 데이터(아이템)가 있는지와 그 값을 얻어오는 것만 관여할 뿐

특정 데이터 타입에 의존하지 않는 장점이 있다.

 

자바의 많은 컬렉션 클래스가 이 인터페이스를 구현하고 있다.

Iterator 인터페이스에는 hasNext(), next() 메서드가 있다.

Iterator 인터페이스를 구현하는 대표적인 클래스는 ArrayList(List 인터페이스), ArrayBlockingQueue(BlockingQueue 인터페이스), HashSet(Set 인터페이스), LinkedListStack, TreeSet, Vector 등이 있다.

 

책에서 소개한 것은 List, Set, BlockingQueue 인터페이스 객체의 Observable 생성 방법이기에

3가지에 대해서 설명하겠다.

 

먼저 List 객체에서 Observable을 만드는 방법이다.

private void listExample(){
        List<String> names = new ArrayList<String>();
        names.add("Jerry");
        names.add("William");
        names.add("Bob");

        Observable<String> source = Observable.fromIterable(names);
        source.subscribe(System.out::println);
    }
결과값
Jerry
William
Bob

 

다음은 Set객체로 Observable을 만드는 방법이다.

private void setExample(){
        Set<String> cities = new HashSet<>();
        cities.add("Seoul");
        cities.add("London");
        cities.add("Paris");

        Observable<String> source = Observable.fromIterable(cities);
        source.subscribe(System.out::println);
    }
결과값
Seoul
London
Paris

 

 

마지막은 BlockingQueue 객체로 Observable을 만드는 방법이다.

private void blockingQueueExample(){
        BlockingQueue<Order> orderQueue = new ArrayBlockingQueue<>(100);
        orderQueue.add(new Order("ORD-1"));
        orderQueue.add(new Order("ORD-2"));
        orderQueue.add(new Order("ORD-3"));

        Observable<Order> source = Observable.fromIterable(orderQueue);
        source.subscribe(System.out::println);
    }
결과값
Order ID: ORD-1
Order ID: ORD-2
Order ID: ORD-3

위의 코드는 BlockingQueue 객체 구현 클래스로 ArrayBlockingQueue를 사용했고,

최대 대기 행렬 수는 100개로 지정했다.

*Map 객체에 관한 Observable 클래스의 from()함수는 왜 없을까?

그 이유는 Map 인터페이스는 배열도 아니고, Iterable<E> 인터페이스를 구현하지 않았기 때문이다.

 

fromIterable() 함수 전체 코드 보러가기