首页 > 解决方案 > 在 Kotlin 中使用 Retrofit 将 Rx 应用转换为 lambda

问题描述

我不熟悉在 Kotlin 中使用 lambda 表达式。我在 Kotlin 中使用 Rx apply 和 Retrofit 成功地进行了网络调用,但 IDE 让我感到我的代码可以转换为 lambda。你能用下面的代码给我一些想法吗?

disposable = publishSubject
            .debounce(300, TimeUnit.MILLISECONDS)
            .switchMap(object: Function<String, Observable<ArrayList<Contact>>> {
                override fun apply(t: String): Observable<ArrayList<Contact>> {
                    return apiService.getContactList("", t)
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(object: DisposableObserver<ArrayList<Contact>>() {
                override fun onNext(t: ArrayList<Contact>) {
                    adapter?.addItem(t)
                }

                override fun onError(e: Throwable) {
                    Toast.makeText(this@MainActivity, e.message, Toast.LENGTH_SHORT).show()
                }
                override fun onComplete() {

                }
            })

标签: androidkotlin

解决方案


如果您的 IDE 显示它可以转换为lambda它可能会代替您执行。

作为 Android Studio 的示例。这是您的代码的外观以及如何将其转换为 lambda。

在此处输入图像描述

因此,如果您单击下方有波浪线的那条线。你会在它旁边看到黄色的羔羊图标。

在此处输入图像描述

如果你点击Convert to lambda你的 IDE 将会把你的代码转换成等效的 lambda。

在此处输入图像描述

等效地,您可以使用MacOption + Enter上的快捷方式执行此操作。


推荐阅读