Kotlin-使用其他列表中的值过滤列表

qojgxg4l  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(204)

这可能是超级简单,但我只是不知道如何谷歌为这一点。
我有什么是:

data class Post(val id: String)

val ids = listOf("1", "5", "19")
val posts = listOf<Post>(post1, post2, post3 etc)

现在我想用id列表来过滤帖子列表。2这是我过滤id的方法:

val output = posts.filter{ it.id == ids[0]}

但如何筛选“ids”列表中的所有项目呢?

des4xlb0

des4xlb01#

您可以对编写的代码进行一点修改,通过检查ids是否包含Postid,而不是仅将其与ids中的第一个值进行比较,来过滤掉单个Post

fun main() {
    // list of ids to be filtered    
    val ids = listOf("1", "5", "19")
    // list of posts to filter from
    val posts = listOf(
                    Post("1"), Post("2"),
                    Post("3"), Post("5"),
                    Post("9"), Post("10"),
                    Post("15"), Post("19"),
                    Post("20")
                )
    // filter a single post that matches the first id from ids
    val singleOutput = posts.filter { it.id == ids[0] }
    // filter all posts that have an id contained in ids
    val multiOutput = posts.filter { ids.contains(it.id) }
    // print the single post with the matching id
    println(singleOutput)
    // print the list of posts with matching ids
    println(multiOutput)
}

此操作的输出为

[Post(id=1)]
[Post(id=1), Post(id=5), Post(id=19)]
gfttwv5a

gfttwv5a2#

您只需要在筛选函数中使用'any'来比较所有列表元素。

val output = posts.filter { post -> ids.any { id -> id == post.id } }

相关问题