Collections 如何通过排除Kotlin中的特定属性来转换自定义对象列表?

Collections 如何通过排除Kotlin中的特定属性来转换自定义对象列表?,collections,kotlin,Collections,Kotlin,如何通过排除T中的属性将列表转换为新列表。 例如,若用户数据类有10个属性,那个么我需要将列表转换为一个新的列表,而用户中并没有一个特定的属性。类似列表的新列表 数据类用户(val name:String,val age:Int) 在这种简单的情况下,您可以将用户列表映射为字符串列表: val names: List<String> = userList.map(User::name) val-names:List=userList.map(User::name) 或者,您可以声

如何通过排除T中的属性将列表转换为新列表。 例如,若用户数据类有10个属性,那个么我需要将列表转换为一个新的列表,而用户中并没有一个特定的属性。类似列表的新列表 数据类用户(val name:String,val age:Int)


在这种简单的情况下,您可以将用户列表映射为字符串列表:

val names: List<String> = userList.map(User::name)
val-names:List=userList.map(User::name)
或者,您可以声明DTO并映射到后者:

class UserWithoutAge(val name: String)

val usersWithoutAge: List<UserWithoutAge> = userList.map { UserWithoutAge(it.name) }
class UserWithOutput(val名称:字符串)
val usersWithoutAge:List=userList.map{userwithoutup(it.name)}

另外,您不必编写显式类型。在这种简单的情况下,您可以将用户列表映射到字符串列表中:

val names: List<String> = userList.map(User::name)
val-names:List=userList.map(User::name)
或者,您可以声明DTO并映射到后者:

class UserWithoutAge(val name: String)

val usersWithoutAge: List<UserWithoutAge> = userList.map { UserWithoutAge(it.name) }
class UserWithOutput(val名称:字符串)
val usersWithoutAge:List=userList.map{userwithoutup(it.name)}

另外,您不必编写显式类型

您可以使用面向对象的方法:

data class User(val name: String, val age: Int)

data class UserNoAge(var name: String) {
    constructor(user: User) : this(user.name)
}

var userList = listOf(User("John", 25), User("Jane", 30))
var userNoAge: List<UserNoAge> = mutableListOf<UserNoAge>()

userNoAge = userList.map{ UserNoAge(it) }

println(userNoAge) // [UserNoAge(name=John), UserNoAge(name=Jane)]
数据类用户(val name:String,val age:Int)
数据类UserNoAge(变量名称:String){
构造函数(user:user):这个(user.name)
}
var userList=listOf(用户(“John”,25),用户(“Jane”,30))
var userNoAge:List=mutableListOf()
userNoAge=userList.map{userNoAge(it)}
println(userNoAge)/[userNoAge(name=John),userNoAge(name=Jane)]

您可以使用面向对象的方法:

data class User(val name: String, val age: Int)

data class UserNoAge(var name: String) {
    constructor(user: User) : this(user.name)
}

var userList = listOf(User("John", 25), User("Jane", 30))
var userNoAge: List<UserNoAge> = mutableListOf<UserNoAge>()

userNoAge = userList.map{ UserNoAge(it) }

println(userNoAge) // [UserNoAge(name=John), UserNoAge(name=Jane)]
数据类用户(val name:String,val age:Int)
数据类UserNoAge(变量名称:String){
构造函数(user:user):这个(user.name)
}
var userList=listOf(用户(“John”,25),用户(“Jane”,30))
var userNoAge:List=mutableListOf()
userNoAge=userList.map{userNoAge(it)}
println(userNoAge)/[userNoAge(name=John),userNoAge(name=Jane)]
在您的第一个示例中:

var userList = mutableListOf<User>()
var nameList= userList.map { it.name }
或者,可能
User
中的
age
属性是可空且不可变的,并且您希望将没有年龄的用户表示为常规
User
,其中
age=null
。在这种情况下,可以复制用户并覆盖年龄字段

// TODO: pass all the other fields too
val withoutAgeList =  userList.map { User(it.name, null) } 
假设
用户
数据类
,我们可以通过使用
copy()
,避免显式命名所有字段:

也许age属性是可以为null和可变的——实际上,您希望就地更改用户,而不是复制用户。这有点冒险,我不主张这样做,除非你真的知道自己在做什么

userList.forEach { it.age = null } 
// They're actually the same list!
val withoutAgeList =  userList
在您的第一个示例中:

var userList = mutableListOf<User>()
var nameList= userList.map { it.name }
或者,可能
User
中的
age
属性是可空且不可变的,并且您希望将没有年龄的用户表示为常规
User
,其中
age=null
。在这种情况下,可以复制用户并覆盖年龄字段

// TODO: pass all the other fields too
val withoutAgeList =  userList.map { User(it.name, null) } 
假设
用户
数据类
,我们可以通过使用
copy()
,避免显式命名所有字段:

也许age属性是可以为null和可变的——实际上,您希望就地更改用户,而不是复制用户。这有点冒险,我不主张这样做,除非你真的知道自己在做什么

userList.forEach { it.age = null } 
// They're actually the same list!
val withoutAgeList =  userList

如果您需要字符串列表,那么您已经通过
map
函数创建了一个字符串列表。我想排除一个属性。例如,若用户数据类有10个属性,那个么我需要将列表转换为一个新的列表,而用户中并没有一个特定的属性。像列表一样的新列表。你所说的“排除一个属性”是什么意思?实例将始终指向其所有成员,即使其中一些成员为空。正如其他答案所说,您要么创建另一个类,要么将此变量设为null。是否要序列化此对象?请澄清您试图解决的用例如果您需要字符串列表,那么您已经通过
map
函数创建了一个字符串列表。我想排除一个属性。例如,若用户数据类有10个属性,那个么我需要将列表转换为一个新的列表,而用户中并没有一个特定的属性。像列表一样的新列表。你所说的“排除一个属性”是什么意思?实例将始终指向其所有成员,即使其中一些成员为空。正如其他答案所说,您要么创建另一个类,要么将此变量设为null。是否要序列化此对象?请澄清您试图解决的用例——好答案!在您的上一个示例中,我建议使用
val withoutAgeList=userList.map{it.copy(age=null)}
来保留inmutabilityppi和crgarridos,这就是我一直在寻找的。谢谢。@crgarridos您所描述的将更适合第二个示例。第三个示例明确表示“您实际上希望它是可变的”。不寻常,但绝对合法。回答得好!在您的上一个示例中,我建议使用
val withoutAgeList=userList.map{it.copy(age=null)}
来保留inmutabilityppi和crgarridos,这就是我一直在寻找的。谢谢。@crgarridos您所描述的将更适合第二个示例。第三个示例明确表示“您实际上希望它是可变的”。不寻常,但肯定是合法的。