如何从 kotlin 中的特定对象制作有效列表
How to make efficient list from particular object in kotlin
嘿,我有一个对象列表,我想将其中的 title
属性 值合并到对象列表中。我成功地做到了这一点,没有任何问题。我的主要问题是在 kotlin 中有什么更好的方法可以帮助实现高效、更好的内存管理以及 eventList
更大时的所有内容。
CombineList.kt
fun main() {
val newList = mutableListOf<String>()
val eventList = createData()
eventList.forEachIndexed { _, event ->
val title = event.title
if (!title.isNullOrEmpty()) {
newList.add(title)
}
}
println(newList)
}
data class Event(val title: String? = null, val status: String? = null)
fun createData() = listOf(
Event("text 1", "abc"),
Event("text 2", "abc"),
Event("text 3", "abc"),
Event("text 4", "abc"),
Event("", "abc"),
Event(null, "abc")
)
您可以使用 map 生成一个新列表,其中包含将给定函数映射到每个元素的所有结果,而不是创建一个新列表并迭代地添加每个元素到 forEach
:
val newList = eventList.map { it.title }.filterNot { it.isNullOrEmpty() }
filterNot
以类似的方式工作,为您提供列表中所有元素的列表,不 满足给定的谓词。
集合常用操作概述can be found here。
与其使用 map 创建所有标题的列表然后过滤掉 null 和空值,不如使用 mapNotNull[= 创建列表更好15=](并在其 lambda 中将空字符串转换为 null):
val newList = createData().mapNotNull { it.title?.ifEmpty { null } }
嘿,我有一个对象列表,我想将其中的 title
属性 值合并到对象列表中。我成功地做到了这一点,没有任何问题。我的主要问题是在 kotlin 中有什么更好的方法可以帮助实现高效、更好的内存管理以及 eventList
更大时的所有内容。
CombineList.kt
fun main() {
val newList = mutableListOf<String>()
val eventList = createData()
eventList.forEachIndexed { _, event ->
val title = event.title
if (!title.isNullOrEmpty()) {
newList.add(title)
}
}
println(newList)
}
data class Event(val title: String? = null, val status: String? = null)
fun createData() = listOf(
Event("text 1", "abc"),
Event("text 2", "abc"),
Event("text 3", "abc"),
Event("text 4", "abc"),
Event("", "abc"),
Event(null, "abc")
)
您可以使用 map 生成一个新列表,其中包含将给定函数映射到每个元素的所有结果,而不是创建一个新列表并迭代地添加每个元素到 forEach
:
val newList = eventList.map { it.title }.filterNot { it.isNullOrEmpty() }
filterNot
以类似的方式工作,为您提供列表中所有元素的列表,不 满足给定的谓词。
集合常用操作概述can be found here。
与其使用 map 创建所有标题的列表然后过滤掉 null 和空值,不如使用 mapNotNull[= 创建列表更好15=](并在其 lambda 中将空字符串转换为 null):
val newList = createData().mapNotNull { it.title?.ifEmpty { null } }