我有一个上课的人:
class Person(var fullName: String, var nickname: String, var age: Int)
在我的代码中,有时我会有一个Person对象列表和一个昵称列表。
var people: List<Person> = listOf(
Person("Adam Asshat", "dontinviteme", 21),
Person("Bob Bowyer", "bob", 37),
Person("Emily Eden", "emily", 22)
)
var invitedToParty: List<String> = listOf("bob", "emily")
现在我想通过使用lambda来获得仅包含Bob和Emily的列表,但是我不确定如何在Kotlin中使用它。
var invitedPeople: List<Person> = // a lambda that results in a list containing only Bob and Emily's objects
在C#中,我可能会使用LINQ和.where()方法与== any()结合使用,但是Kotlin似乎从我发现的内容中没有类似的东西。
在Kotlin lambda的餐厅里甚至有可能吗?
答案 0 :(得分:2)
在C#中,您需要这样做:
people.Where(p => invitedToParty.Any(s => s == p.nickname));
就像在科特林一样,您将使用filter
,就像Where
,而any
本身就是这样:
people.filter { p -> invitedToParty.any { it == p.nickname } }
或使用contains
:
people.filter { invitedToParty.contains(it.nickname) }
答案 1 :(得分:1)
您可以使用.filter()
函数执行此操作:
val invitedPeople: List<Person> = people.filter { it.nickname == "bob" || it.nickname == "emily" }
或者您可以执行以下基于集合的操作:
val invitedPeople: List<Person> = people.filter { it.nickname in setOf("bob", "emily") }
答案 2 :(得分:0)
您可以这样做:
val invitedPeople: List<Person> = people.filter { invitedToParty.contains(it.nickname) }