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
。