just
: 인자로 받은 데이터를 순서대로 발행하는 Observable 생성 연산자이며, 최대 10개까지 발행할 수 있다.
fun main(){ | |
Observable.just("안","녕","하","세","요") | |
.subscribe { | |
print(it) | |
} | |
} | |
결과 | |
안녕하세요 |
create
: emitter를 이용하여 데이터를 발행하고 onNext(), onComplete(), onError() 함수를 이용하여 데이터를 발행하거나 데이터의 발행을 완료처리하거나 데이터 발행도중 에러가 발생했음을 발생한다.
fun main(){ | |
Observable.create<Char>{ emitter -> | |
val characterList = listOf('A','B','C','D','E') | |
characterList.forEachIndexed { index, c -> | |
emitter.onNext(c) | |
} | |
}.subscribe { | |
print(it) | |
} | |
} | |
결과 | |
ABCDE |
onComplete() 호출하면 데이터 발행이 완료되었기 때문에 더이상 데이터가 발행되지 않는다.
fun main(){ | |
Observable.create<Char>{ emitter -> | |
val characterList = listOf('A','B','C','D','E') | |
characterList.forEachIndexed { index, c -> | |
if (index == 2) { | |
emitter.onComplete() | |
} | |
emitter.onNext(c) | |
} | |
}.subscribe { | |
print(it) | |
} | |
} | |
결과 | |
AB |
interval
: 시간 간격을 두고 데이터를 전달하는 stream을 만듭니다. 기본적으로 SchedulerSupport.COMPUTATION 스케쥴러로 별도의 스레드에서 실행이됩니다. 그 때문에 아래 코드를 실행하면 메인스레드가 먼저 종료되어 print가 되지 않아 메인스레드의 종료를 3초 늦추는 sleep 코드를 넣어 놨습니다.
fun main(){ | |
val dateTimeFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm:ss.SSS") | |
Observable.interval(1000L, TimeUnit.MILLISECONDS) | |
.subscribe { | |
println(LocalTime.now().format(dateTimeFormatter)) | |
} | |
Thread.sleep(3000) | |
} | |
결과 | |
10:54:18.990 | |
10:54:19.974 | |
10:54:20.974 |
timer
: 설정한 딜레이 후 데이터를 발행하는 스트림을 만듭니다. interval과 유사하지만 단 한번만 실행이 됩니다.
fun main(){ | |
val dateTimeFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm:ss.SSS") | |
Observable.timer(2000L, TimeUnit.MILLISECONDS) | |
.subscribe { | |
println(LocalTime.now().format(dateTimeFormatter)) | |
} | |
Thread.sleep(3000) | |
} | |
결과 | |
10:55:35.192 |
range(n, m)
: n 부터 m만큼 증가하는 스트림을 만듭니다.
fun main(){ | |
val dateTimeFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm:ss.SSS") | |
Observable.range(10, 5) | |
.subscribe { | |
println(it) | |
} | |
} | |
결과 | |
10 | |
11 | |
12 | |
13 | |
14 |
repeat
: 반복 횟수를 지정하여, 횟수만큼 반복하는 스트림을 만듭니다.
fun main(){ | |
Observable.just("안녕","하세요") | |
.repeat(2) | |
.subscribe { | |
println(it) | |
} | |
} | |
결과 | |
안녕 | |
하세요 | |
안녕 | |
하세요 |
fromArray
: array(배열)의 스트림을 만듭니다. *를 붙이면 요소를 발행하고, 붙이지 않으면 배열자체를 발행합니다.
fun main(){ | |
val array = arrayOf("안","녕","하","세","요") | |
Observable.fromArray(*array) | |
.subscribe { | |
println(it) | |
} | |
} | |
결과 | |
안 | |
녕 | |
하 | |
세 | |
요 |
fromCallable
: 외부 함수로부터 데이터를 발행하는 스트림을 만듭니다.
fun main(){ | |
var cnt = 0 | |
val observable = Observable.fromCallable { | |
makeName(cnt++) | |
} | |
Thread.sleep(1000) | |
observable.subscribe { println(it) } | |
Thread.sleep(1000) | |
observable.subscribe { println(it) } | |
} | |
fun makeName(num: Int): String = | |
when (num) { | |
0 -> "예티" | |
1 -> "제프" | |
2 -> "루트" | |
else -> "마리" | |
} | |
결과 | |
예티 | |
제프 |
fromIterable
: iterable을 상속받은 list, set 등의 스트림을 만듭니다. 결과의 순서가 뒤죽박죽인 이유는 Set 콜렉션은 순서가 정해져 있지 않기 때문에 항상 순서가 변경됩니다.
fun main(){ | |
val set: HashSet<String> = hashSetOf("안","녕","하","세","요") | |
Observable.fromIterable(set) | |
.subscribe { | |
print(it) | |
} | |
} | |
결과 | |
안하세요녕 |
'안드로이드 > RxJava' 카테고리의 다른 글
Cold Observable vs Hot Observable (0) | 2023.01.25 |
---|---|
[안드로이드] RxJava - 변환 연산자 (0) | 2022.04.06 |
[안드로이드] RxJava 연산자 종류 (0) | 2022.03.31 |
Observable에 관해서.. (0) | 2021.06.08 |
RxJava란? (0) | 2021.06.08 |