Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin-通过与属性列表进行比较来筛选对象列表_Android_List_Lambda_Kotlin - Fatal编程技术网

Android Kotlin-通过与属性列表进行比较来筛选对象列表

Android Kotlin-通过与属性列表进行比较来筛选对象列表,android,list,lambda,kotlin,Android,List,Lambda,Kotlin,我有一个班上的人: 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("Emil

我有一个班上的人:

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")
var-people:List=listOf(
人(“亚当·阿沙特”、“顿廷维泰姆”,21岁),
人(“鲍勃·鲍耶”,“鲍勃”,37岁),
人(“艾米丽·伊登”,“艾米丽”,22岁)
)
var invitedToParty:List=listOf(“bob”、“emily”)
现在我想通过使用lambda's得到一个只有Bob和Emily的列表,但我不确定在Kotlin该怎么做

var invitedPeople: List<Person> = // a lambda that results in a list containing only Bob and Emily's objects
var invitedPeople:List=//一个lambda,它生成一个只包含Bob和Emily对象的列表
在C#中,我可能会使用LINQ和a.where()-方法与an==any()相结合,但根据我的发现,Kotlin似乎没有类似的功能


这在Kotlin lambda的中是否可行?

您可以使用
.filter()
函数来执行此操作:

val invitedPeople: List<Person> = people.filter { it.nickname == "bob" || it.nickname == "emily" }
val invitedPeople:List=people.filter{it.昵称==“bob”| | it.昵称==“emily”}
或者,您也可以基于以下设置执行此操作:

val invitedPeople: List<Person> = people.filter { it.nickname in setOf("bob", "emily") }
val invitedPeople:List=people.filter{it.nickname in setOf(“bob”、“emily”)}
在C#中,您应该执行以下操作:

people.Where(p => invitedToParty.Any(s => s == p.nickname));
同样地,在Kotlin中,您将使用
过滤器
,这类似于
Where
any
本身就说明了这一点:

people.filter { p -> invitedToParty.any { it == p.nickname } }
或使用
包含

people.filter { invitedToParty.contains(it.nickname) }
您可以这样做:

val invitedPeople: List<Person> = people.filter { invitedToParty.contains(it.nickname) }
val invitedPeople:List=people.filter{invitedToParty.contains(it.昵称)}

为什么不干脆
people.filter{invitedToParty.contains(it.昵称)}
?@Joffrey我想你也可以这么做。更新以适应您的评论。谢谢,事实上,我刚刚意识到在kotlin中有更多的习惯用法,在
操作符中使用
people.filter{it.昵称in invitedToParty}
@Joffrey同意,肯定有几种方法可以做到这一点,我只是想展示一下
过滤器
+
任何
方法,因为这是OP在C#中熟悉的方法。尽管如此,能提出更好的解决方案的确是件好事。谢谢谢谢你的建议,Aomine和Joffrey。我总是乐于学习多种方法来完成某件事,我会在回到家里的笔记本电脑后尝试一下,然后接受你的答案;您的第一种方法是硬编码的,这不是我实际问题所需要的。非常感谢。