map, flatMap

Project Reactor 의 “map, flatMap” transform operator 에 대해 정리한다.

map

하난의 element 를 1-to-1 방식으로 변형한다.
공식 문서의 Mono 의 map 정의는 다음과 같다.

1
2
Transform the item emitted by this Mono 
by applying a synchronous function to it.

공식 문서의 Flux 의 map 정의는 다음과 같다.

1
2
Transform the items emitted by this Flux 
by applying a synchronous function to each item.

다응 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fun namesFluxMapAndFilter(strLen: Long): Flux<String> {
val names = listOf("ko", "jun", "hee")

return Flux.fromIterable(names)
.map { it.uppercase(Locale.getDefault()) } // HERE !!
.filter { it.length > strLen }
}

@Test
fun namesFluxMapAndFilter() {
// given
val strLen = 2L

// when
val names: Flux<String> = fluxMonoGenerator.namesFluxMapAndFilter(strLen)

// then
StepVerifier.create(names)
.expectNext("JUN", "HEE")
.verifyComplete()
}

위 코드는,

  1. 각 element 를 대문자로 변형한다. (map)
    “ko” -> “KO”
    “jun” -> “JUN”
    “hee” -> “HEE”
  2. 길이가 2 보다 큰 element 만 추출한다. (filter)
    “JUN”, “HEE”
Read more