Kotlin中如何流式映射User数组列表,提取姓名与城市属性?
Kotlin中映射User列表到仅含姓名和城市的新列表解决方案
首先,你的基础User data class定义应该是这样的:
data class User(val name: String, val age: Int, val city: String)
下面提供两种靠谱的实现方式,根据你的使用场景选择:
方式一:定义专用data class(类型安全,推荐长期使用)
如果需要多次用到仅含姓名和城市的用户信息,最好定义一个专门的data class来封装:
data class UserBasicInfo(val name: String, val city: String)
然后通过map操作符转换原列表:
// 示例原User列表 val userList = listOf( User("张三", 28, "北京"), User("李四", 32, "上海") ) // 转换为仅含姓名和城市的新列表 val basicUserList = userList.map { UserBasicInfo(it.name, it.city) }
此时basicUserList的类型是List<UserBasicInfo>,每个元素只包含你需要的两个属性,类型安全且可读性强。
方式二:使用Pair(快速实现,适合临时场景)
如果只是临时需要这个结构,不想额外定义类,可以用Kotlin内置的Pair:
val userPairList = userList.map { it.name to it.city }
userPairList的类型是List<Pair<String, String>>,其中Pair.first对应用户姓名,Pair.second对应城市。
常见错误排查
如果你之前的代码没得到正确结果,大概率是以下问题:
- 误用了集合操作符:比如用
filter(过滤元素)代替了map(转换元素结构) - 映射时返回了原
User对象:比如map { it },相当于没做任何转换 - 提取属性时拼写错误:比如把
city写成citi,导致编译错误或空值 - 返回了错误的结构:比如
map { listOf(it.name, it.city) },得到的是List<List<String>>而非预期的单元素结构
内容的提问来源于stack exchange,提问作者peace3106
相关产品推荐
相关产品推荐

