The*_*Fox 9 lambda android list kotlin
我有一个类人:
class Person(var fullName: String, var nickname: String, var age: Int)
Run Code Online (Sandbox Code Playgroud)
在我的代码中,有时我有一个 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")
Run Code Online (Sandbox Code Playgroud)
现在我想通过使用 lambda 来获得一个只有 Bob 和 Emily 的 List,但我不确定在 Kotlin 中我会如何处理它。
var invitedPeople: List<Person> = // a lambda that results in a list containing only Bob and Emily's objects
Run Code Online (Sandbox Code Playgroud)
在 C# 中,我可能会使用 LINQ 和 .where() 方法与 == any() 结合使用,但从我发现的内容来看,Kotlin 似乎没有类似的东西。
这在 Kotlin lambda 中甚至可能吗?
Ous*_* D. 13
在 C# 中,你会这样做:
people.Where(p => invitedToParty.Any(s => s == p.nickname));
Run Code Online (Sandbox Code Playgroud)
同样在 Kotlin 中,你会使用filterwhich is likeWhere并any代表它自己:
people.filter { p -> invitedToParty.any { it == p.nickname } }
Run Code Online (Sandbox Code Playgroud)
或使用contains:
people.filter { invitedToParty.contains(it.nickname) }
Run Code Online (Sandbox Code Playgroud)
您可以使用该.filter()函数来执行此操作:
val invitedPeople: List<Person> = people.filter { it.nickname == "bob" || it.nickname == "emily" }
Run Code Online (Sandbox Code Playgroud)
或者你可以做这个基于集合的:
val invitedPeople: List<Person> = people.filter { it.nickname in setOf("bob", "emily") }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13587 次 |
| 最近记录: |