제이슨의 개발이야기
RxJava 함수에 대하여(fromXXX()) fromXXX함수계열!! 본문
just() 나 create() 는 단일 데이터를 다뤘습니다. 그럼 단일 데이터가 아닐 때는 어떻게 해야 할까요?
fromXXX() 계열 함수를 사용하면 됩니다
fromArray()
fromArray() 함수는 배열에 들어 있는 데이터를 처리할 때 활용하는 함수 입니다
예제 코드!
Integer arr[];
arr= new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
Observable<Integer> observable = Observable.fromArray(arr);
observable.subscribe(System.out::println);
fromIterable()
Observable 을 만드는 다른 방법은 Iterable 인터페이스를 구현한 클래스에서 Observable 객체를 생성하는 것입니다
Iterable 인터페이스는 Iterable 패턴을 구현한 것으로 다음에 어떤 데이터가 있는지 와 그 값을 얻어오는 것만 관여할 뿐 특정 데이터 타입에 의존하지 않는 장점이 있습니다!
Iterable<T> 인터페이스를 구현한 대표적 클래스가 ArrayList , ArrayBlockingQueue,HashSet,LinkedList,Stack ,TreeSet,Vector 등 이 있습니다 참고로 HashMap 은 Iterable 이 아닌 Map인터페이스 입니다
예제 코드!
List<String> names = new ArrayList<>();
names.add("jerry");
names.add("jon");
names.add("hash");
Observable <String> observable = Observable.fromIterable(names);
observable.subscribe(System.out::println);
앞서 말한 Iterable<T> 인터페이스 로 구현 한 객체들은 fromIterable()를 사용할 수 있습니다 fromArray() 는 사용하실 수 없습니다!
<예외!> Stack 클래스 같은경우 원래 값이 반대(hash,jon,jerry) 순으로 나와야하지만 fromIterable() 메소드를 사용하면 위 사진 처럼 jerry , jon , hash 순으로 나옵니다!
ex)
Stack<String> names = new Stack<>();
names.push("jerry");
names.push("jon");
names.push("hash");
Observable <String> observable = Observable.fromIterable(names);
-> jerry , jon , hash 순으로 나옴!
fromCallable() 함수
RxJava 1.2 부터는 위와 같이 비동기로 작업을 처리하고 그 결과 (하나의 Item) 가 발행되는 작업흐름을 보다 편리하게 만들기 위해 Observable.fromCallable() 이 추가되었습니다.
밑에 코드는 Callable 인터페이스의 모습입니다
public interface Callable<V> {
// 결과를 계산하고 , 만약 그렇게 할 수 없는 경우 예외를 던집니다
@return 계산된 결과값
@throws Exception 계산을 완료할 수 없을 때
V call() throws Exception;
}
run() 메소드가 있는 Runnable 인터페이스 처럼 메소드가 하나고 , 인자가 없다는 점에서 비슷하지만 실행결과를 리턴한다는 점에서 차이가 있습니다 또한 Executor 인터페이스의 인자로 활용하기 때문에 잠재적으로 다른 스레드에서 실행되는 것을 의미합니다
예제코드
Callable<String> callable =()->{
Thread.sleep(1000);
return "hello callable";
};
Observable<String> observable = Observable.fromCallable(callable);
observable.subscribe(System.out::println);
실행결과는
1초간 쉬고 나서 hello callable 을 출력합니다!
아직 남은 fromXXX함수 계열은 2탄으로 작성하겠습니다 ㅎㅎ
'Rx' 카테고리의 다른 글
RxJava fromXXX 함수에 대하여 2탄 (0) | 2021.02.28 |
---|---|
RxJava 함수에 대해서(create())! (0) | 2021.02.25 |
RxJava Observable 클래스 와 just 함수 (0) | 2021.02.24 |
Rx 자바 란 무엇일까?? (0) | 2021.02.22 |