Android 将for循环转换为stdlib操作

Android 将for循环转换为stdlib操作,android,android-studio,kotlin,Android,Android Studio,Kotlin,我有以下代码 for (i in 0..(sites.length()-1)) { val site = sites.getJSONObject(i) siteOptions.add(Site(site.getInt("id"), site.getString("name"))) } Android studio建议使用stdlib操作。如何做到这一点?这实际上取决于站点的类型,我希望是org.json.JSONArray。您可以应用一个范围并使用函数方法,如map,然后: (

我有以下代码

for (i in 0..(sites.length()-1)) {
    val site = sites.getJSONObject(i)
    siteOptions.add(Site(site.getInt("id"), site.getString("name")))
}

Android studio建议使用stdlib操作。如何做到这一点?

这实际上取决于
站点的类型,我希望是
org.json.JSONArray
。您可以应用一个范围并使用函数方法,如
map
,然后:

(0 until sites.length())
    .map { sites[it] }
    .forEach { siteOptions.add(Site(it.getInt("id"), it.getString("name")) }

AndroidStudio甚至提供了转换它的选项。

它实际上取决于
站点的类型,我希望是
org.json.JSONArray
。您可以应用一个范围并使用函数方法,如
map
,然后:

(0 until sites.length())
    .map { sites[it] }
    .forEach { siteOptions.add(Site(it.getInt("id"), it.getString("name")) }

AndroidStudio甚至为您提供了转换它的选项。

每当IDE建议您执行代码转换时,您都可以通过按Alt Enter键并从菜单中选择必要的快速修复来执行此操作。

每当IDE建议您执行代码转换时,您可以通过按Alt Enter键并从菜单中选择必要的快速修复来完成此操作。

假设
站点:JSONArray
站点选项:可变列表
我将对stdlib操作执行类似操作

siteOptions += (0 until sites.length())
        .mapNotNull { sites.optJSONObject(it) }
        .map { Site(it.getInt("id"), it.getString("name")) }
可读性更低但内存效率更高:

siteOptions += (0 until sites.length())
        .mapNotNull { sites.optJSONObject(it)
                ?.let { Site(it.getInt("id"), it.getString("name")) }
        }

假设
sites:JSONArray
sitepoptions:MutableList
我将对stdlib操作执行类似的操作

siteOptions += (0 until sites.length())
        .mapNotNull { sites.optJSONObject(it) }
        .map { Site(it.getInt("id"), it.getString("name")) }
可读性更低但内存效率更高:

siteOptions += (0 until sites.length())
        .mapNotNull { sites.optJSONObject(it)
                ?.let { Site(it.getInt("id"), it.getString("name")) }
        }

这不是这个问题的答案,但我认为
getJSONObject
需要一个
String
参数,但在你的代码中
I
Int
。这不是这个问题的答案,但我认为
getJSONObject
需要一个
String
参数,但在你的代码中
I
Int