【问题标题】:Equivalence of flatMapMany and flatMap from Mono/Flux to Flow (Kotlin Coroutines)从 Mono/Flux 到 Flow 的 flatMapMany 和 flatMap 的等价性(Kotlin Coroutines)
【发布时间】:2019-11-17 21:29:05
【问题描述】:

我正在尝试重构这段代码:

fun getCharacterFilms(serverRequest: ServerRequest): Mono<ServerResponse> {
    val films = starWarsApiWebClient.findCharacter(serverRequest.pathVariable("id").toInt())
            .flatMapMany { it.films.toFlux() }
            .flatMap(starWarsApiWebClient::findFilm)

    return ok().body(films, Film::class.java)
}

地点:

fun findCharacter(id: Int): Mono<Character> {...}

fun findFilm(uri: URI): Mono<Film> {...}

但现在有了 Flow:

fun findCharacter(id: Int) = webClient.baseUrl("https://swapi.co/api/").build()
            .get().uri("/people/$id/")
            .header("Content-Type", MediaType.APPLICATION_JSON_VALUE)
            .accept(MediaType.APPLICATION_JSON).retrieve()
            .bodyToFlow<Character>()

fun findFilm(uri: URI): Flow<Film> {
    val webClient = WebClient.builder()
    return webClient.build()
            .get().uri(uri)
            .header("Content-Type", MediaType.APPLICATION_JSON_VALUE)
            .accept(MediaType.APPLICATION_JSON).retrieve()
            .bodyToFlow<Film>()
}

没有问题:

suspend fun getCharacter(serverRequest: ServerRequest) = ok().bodyAndAwait(starWarsApiWebClient.findCharacter(serverRequest.pathVariable("id").toInt()))

但我不知道如何翻译这些 flatMapMany 和 flatMap。

提前致谢。

【问题讨论】:

    标签: spring-webflux kotlin-coroutines


    【解决方案1】:

    我明白了:

    suspend fun getCharacterFilms(serverRequest: ServerRequest) = ok()
            .bodyAndAwait(starWarsApiWebClient.findCharacter(serverRequest.pathVariable("id").toInt())
                    .flatMapMerge {
                        it.films.asFlow()
                    }.flatMapMerge {
                        starWarsApiWebClient.findFilm(it)
                    })
    

    【讨论】:

    • flatMapMerge(在这种情况下代替 flatMapConcat)更好,我将更新我的答案
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多