728x90
배열, 리스트 등의 자료구조와 Callable, Publisher, Future 등은 From...() 함수를 통해 Observale을 생성할 수 있다.
fromArray()
배열을 Observable 변환하기 위해 사용하며, 아이템을 순차적으로 발행한다.
fun main(){
var items = arrayOf(100, 200, 300)
items.toObservable().subscribe(
{ println("${it}") },
{ println("onError") }, // onError: Consumer
{ println("onComplete") }, // onComplete: Consumer
{ println("onSubscribe") } // onSubscribe: Consumer
)
Observable.fromArray(*items).subscribe(
{ println("${it}") },
{ println("onError") }, // onError: Consumer
{ println("onComplete") }, // onComplete: Consumer
{ println("onSubscribe") } // onSubscribe: Consumer
)
}
실행결과:
onSubscribe
100
200
300
onComplete
onSubscribe
100
200
300
onComplete
위 코드를 보면 예제가 서로 다르다. toObservable을 이용하는 방법과 '*'를 이용해 주소 값의 데이터를 읽어오는 방법이 있다.
fromIterable()
ArrayList, HashSet, LinkedList, Stack, Vector 등의 자료 구조 클래스를 Observable로 변환하기 위해서 사용하는 함수다. Iterable 인터페이스는 반복자를 반환하며 iterator 패턴을 구현한 것이다. Iterator 인터페이스는 어떤 데이터가 있는지와 해당 값을 얻오는 것만 수행합니다.
fun main(){
val items = HashSet<Any>() // 가변성
items.add(6)
items.add(false)
items.add("b")
items.toObservable().subscribe(
{ println("${it}") },
{ println("onError") }, // onError: Consumer
{ println("onComplete") }, // onComplete: Consumer
{ println("onSubscribe") } // onSubscribe: Consumer
)
val item = ArrayList<People>()
item.add(People("gon"))
item.add(People("min"))
item.add(People("jun"))
Observable.fromIterable(item).subscribe(
{ println(it.getterName()) },
{ println("onError") }, // onError: Consumer
{ println("onComplete") }, // onComplete: Consumer
{ println("onSubscribe") } // onSubscribe: Consumer
)
}
class People(name : String) {
lateinit var name : String
init {
this.name = name
}
fun getterName(): String {
return this.name
}
}
실행결과:
onSubscribe
b
false
6
onComplete
onSubscribe
gon
min
jun
onComplete
위의 코드를 보면 ArrayList와 HashSet을 사용한 것을 볼 수 있다. 지금까진 직접 값을 할당하여 예제를 해왔었지만 People 객체에 데이터를 전달하고, getter 함수를 호출하는 예제도 작성해보았다.
'Rx' 카테고리의 다른 글
RxKotlin- Part 5. Hot Observable, Cold Observable (0) | 2021.02.10 |
---|---|
RxKotlin- Part 4. Observable 외 다른 스트림 (Single , Maybe) (0) | 2021.02.04 |
RxKotlin- Part 3. Observable 생성 (fromFuture, fromPublisher) (0) | 2021.01.31 |
RxKotlin - Part 1. Observable 생성 - just(), onCreate() (0) | 2021.01.31 |
RxJava, RxKotlin, RxAndroid 이해하기 (0) | 2021.01.31 |