如果我在Kotlin中有一个对象的集合,是否有一种快速的方法来获取这些对象的某个属性的集合?我看了一下collection operations for Kotlin的清单,但没有什么能让我感到高兴(但我可能忽视了一些事情)
在python中,它类似于:
[person.name for person in persons]
我更喜欢使用收藏功能而不是:
var nameMap = mutableListOf<String>()
persons.forEach{person -> nameMap.add(person.name)}
我非常缺乏过滤/ lambda函数以及除列表理解之外的任何知识,所以如果这是一个简单的问题就道歉
答案 0 :(得分:40)
// v--- the variable type can be removed
var nameMap: MutableList<String> = persons.map { it.name }.toMutableList();
IF 你想要一个不可变的List
,它可以简化如下:
// v--- the variable type can be removed
var nameMap: List<String> = persons.map { it.name };
或改为使用function reference expression:
var nameMap = persons.map(Person::name);
答案 1 :(得分:7)
如果要映射模型,请执行此操作。
var nameMap: List<Model> = persons.map { Model(it.name,it.number) };
答案 2 :(得分:0)
选项1:
inline fun <reified T, Y> MutableList<T>.listOfField(property: KMutableProperty1<T, Y?>): MutableList<Y> {
val yy = ArrayList<Y>()
this.forEach { t: T ->
yy.add(property.get(t) as Y)
}
return yy
}
用法:
val serviceIds = services.listOfField(ServiceModel::id)
选项2:
var serviceIds: MutableList<String> = services.map { it.id }.toMutableList()
选项3:
功能参考
var serviceIds = services.map(Person::id)