You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何正确过滤列表无效值实现逐行打印有效元素

Kotlin列表有效条目逐行打印问题

问题场景

Kotlin开发中处理Event对象列表,需求为逐行打印列表内的有效条目,剔除空行、内容为字面量"null"的无效行,初始实现及第一次过滤修改均未得到符合预期的结果。

初始实现代码(StringPrint.kt)

fun main() {
    val newString = createData().joinToString("\n") { "${it.title?: ""} ${it.status?: ""}".trim() }
    println(newString)
}

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("", null),
    Event(null, ""),
    Event(null, "3"),
    Event("null", ""),
    Event("456", "89")
)

初始运行输出

text 1 abc
text 2 abc
text 3 abc
text 4 abc

(空白行)
(空白行)
3
null
456 89

初始输出存在两类需要剔除的无效内容:由空值/空字符串拼接生成的空白行、内容为"null"的无效行。

预期输出

text 1 abc
text 2 abc
text 3 abc
text 4 abc
3
456 89

第一次修改的问题

第一次修改使用的过滤逻辑如下:

val newString = createData()
        .filterNot { it.title.isNullOrBlank() || it.status.isNullOrBlank() }
        .joinToString("\n") { "${it.title?: ""} ${it.status?: ""}".trim() }
println(newString)

该逻辑的错误点在于过滤规则设置不合理:要求title和status两个字段同时非空、非空白,会误过滤Event(null, "3")这类仅单个字段有效的合法条目,同时也没有处理title值为字面量"null"的无效场景,运行后丢失了3这条有效内容。

正确实现方案

过滤逻辑不需要提前判定单个字段是否合法,直接对每个条目转换后的最终打印字符串做校验即可,从根源避免单字段判定的误判问题,代码如下:

fun main() {
    val newString = createData()
        // 先将每个对象转换为trim后的最终打印字符串
        .map { "${it.title ?: ""} ${it.status ?: ""}".trim() }
        // 过滤规则:非空白,且内容不等于字面量"null"
        .filter { it.isNotBlank() && it != "null" }
        // 拼接换行符输出
        .joinToString("\n")
    println(newString)
}

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("", null),
    Event(null, ""),
    Event(null, "3"),
    Event("null", ""),
    Event("456", "89")
)

运行上述代码即可得到完全符合预期的输出。


内容的提问来源于stack exchange,提问作者Compose Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:15:55