首页 > 解决方案 > 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("@")  }
        }

标签: androidkotlin

解决方案


如果不看你使用什么样的类,有点难以确定,但假设你使用数据类,可以这样做:

val cleanThreadList = threadList.map { thread ->
    thread.copy(
        messages = thread.messages.filter {
            it.text == "@"
        }
    )
}

编辑(如果你的类是可变的解决方案)

如果你的类是可变的,那么它是相似的,但有点不同:

threadList.forEach { thread ->
    thread.removeIf { message ->
      message.text != "@"
    }
}

推荐阅读