如何从 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 } }