android - Kotlin 内部列表过滤
问题描述
我有一个如下列表,
ThreadsList-
Thread1-
Messages-
Message1
text="@"
Message2
text="hello"
Thread2-
Messages-
Message1
text="@"
Message2
text="hello"
Message3
text="hi"
我需要删除每个线程中包含文本“@”的所有消息
我已经尝试了下面的代码,但它没有按预期工作,
threadsList.filter { item ->
item.messages.any { !it.text.equals("@") }
}
解决方案
如果不看你使用什么样的类,有点难以确定,但假设你使用数据类,可以这样做:
val cleanThreadList = threadList.map { thread ->
thread.copy(
messages = thread.messages.filter {
it.text == "@"
}
)
}
编辑(如果你的类是可变的解决方案)
如果你的类是可变的,那么它是相似的,但有点不同:
threadList.forEach { thread ->
thread.removeIf { message ->
message.text != "@"
}
}
推荐阅读
- java - Java 范围问题:try-catch 块,将 String 解析为 Date
- html - 复选框的位置
- spring-boot - Spring boot - 从 2 ymls 中获取不同的属性
- wordpress - 在高级自定义字段中访问 Route 参数 Gutenberg 阻止回调函数
- android - Android - 使用活动和片段导航 - 二进制 XML 文件错误
- symfony - Symfony 5.3+ 翻译提供者 Crowdin 不更新本地文件
- c++ - 从文本文件 (.txt) 中读取字节数组
- c - 为什么多线程代码(使用 pthreads)似乎比多进程代码(使用 fork)慢?
- python - Flask 应用程序通过入口在 Kubernetes 中获取 404,无需重定向
- csv - 如何将完整的 Athena 查询结果下载到 CSV 文件