RxKotlin flattenAsObservable (): no coincide con el método de reference

Estoy convirtiendo algunos códigos Java en Kotlin y estoy teniendo problemas con flattenAsObservable()

Así es como se veía el código en Java:

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

Esto es lo que tengo hasta ahora en Kotlin:

 discogsInteractor.search(query) .map { RootSearchResponse::searchResults } .flattenAsObservable<SearchResult> { searchResults -> searchResults } .take(12) 

Subraya los segundos resultados de searchResults y me da el siguiente error:

 Requinetworking: (Mutable)Iterable<SearchResult!>! Found: KProperty1<RootSearchResponse, List<SearchResult>>! 

Puedo replace

 .map { RootSearchResponse::searchResults } 

con

 .map { searchResponse -> searchResponse.searchResults } 

y funcionará ¿Cómo hago reference al método correctamente? ¿O cuál es la razón por la que no puedo en este caso?

RootSearchResponse:

 data class RootSearchResponse(val pagination: Pagination, @SerializedName("results") val searchResults: List<SearchResult>) 

RootSearchResponse::searchResults es una reference de método. En lugar de pasar esto a la function de map , usando {} , está pasando un lambda que siempre devuelve esta reference de método.

Básicamente, está asignando cada elemento entrante a la reference de ese método con su operación de map , en lugar de aplicar ese método a cada elemento como desee. Por lo tanto, los parameters entrantes de su método flattenAsObservable son siempre la misma reference al método KProperty1 , que es un KProperty1 .

Para aplicar el método al que hace reference a cada elemento, puede pasar la reference al método en paréntesis regulares, de esta forma:

 .map(RootSearchResponse::searchResults) 

Para un ejemplo simple adicional de lo que está sucediendo con la lambda:

 listOf(1, 2, 3, 4, 5).map { 2 } 

Esta operación asignaría cada elemento a 2 y terminaría con una list que solo contiene 2 cinco veces. Básicamente es solo una abreviatura de lo siguiente, simplemente sin un nombre de parámetro explícito:

 listOf(1, 2, 3, 4, 5).map { x -> 2 } 
  • Usando RxJava para unir datos locales con datos remotos (o en caching)
  • RxKotlin collectInto () MutableList usando references de método
  • RxJava- Gire Observable en Iterator, Stream o Sequence
  • OnComplete nunca se llamó con toSortedList () y groupBy ()
  • RxKotlin - Single.just () no se emite al suscribirse TestSubscriber
  • No se puede cambiar el text de ActionMenuItemView con RxKotlin
  • Cómo pasar nulo a un Observable con tipo anulable en RxJava 2 y Kotlin
  • La suscripción de rx kotlin no funciona, no recibe artículos
  • RxKotlin - matriz de observadores dynamics
  • Rx-Kotlin awaitTerminalEvent nunca se sube a Completo
  • Repetir acciones en estado con RxJava