gpt4 book ai didi

kotlin - RxKotlin flattenAsObservable() : type mismatch with method reference

转载 作者:行者123 更新时间:2023-12-02 13:24:26 24 4
gpt4 key购买 nike

我正在将一些 Java 代码转换为 Kotlin,但在使用 flattenAsObservable() 时遇到了一些问题

Java 中的代码如下所示:

discogsInteractor.search(query)
.map(RootSearchResponse::getSearchResults)
.flattenAsObservable(searchResults -> searchResults)
.take(12)

这是我目前在 Kotlin 中所拥有的:
discogsInteractor.search(query)
.map { RootSearchResponse::searchResults }
.flattenAsObservable<SearchResult> { searchResults -> searchResults }
.take(12)

它强调了第二个 searchResults并给我以下错误:
Required: (Mutable)Iterable<SearchResult!>!
Found: KProperty1<RootSearchResponse, List<SearchResult>>!

我可以换
.map { RootSearchResponse::searchResults }


.map { searchResponse -> searchResponse.searchResults }

它会起作用。如何正确引用方法?或者在这种情况下我不能的原因是什么?

根搜索响应:
data class RootSearchResponse(val pagination: Pagination,
@SerializedName("results") val searchResults: List<SearchResult>)

最佳答案

RootSearchResponse::searchResults是方法引用。而不是将其传递给 map函数,通过使用 {} ,您传入的 lambda 始终返回此方法引用。

基本上,您使用 map 将每个传入元素映射到该方法引用。操作,而不是像您想要的那样将该方法应用于每个元素。所以你的flattenAsObservable的传入参数方法始终是对 searchResults 的相同引用方法,即 KProperty1 .

要将您引用的方法应用于每个元素,您可以在常规括号中传递方法引用,如下所示:

.map(RootSearchResponse::searchResults)

有关 lambda 发生的事情的另一个简单示例:
listOf(1, 2, 3, 4, 5).map { 2 }

此操作会将每个元素映射到 2 ,你最终会得到一个只包含 2 的列表。五次。它基本上只是以下内容的简写,只是没有明确的参数名称:
listOf(1, 2, 3, 4, 5).map { x -> 2 }

关于kotlin - RxKotlin flattenAsObservable() : type mismatch with method reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44245780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com