我是kotlin的新手。
我有一个名为User的数据类,它有三个属性名称、年龄和城市。我有的清单
数组。我想映射这个数组User的列表,以获得一个包含用户名称和城市的新列表。
这些是我的代码
data class User(var name: String, var age: Int, var city: String)
fun main(args: Array<String>) {
val user1 = User("John", 18, "Paris")
val user2 = User("Sara", 25, "Tokyo")
val user3 = User("Dave", 34, "Tunis")
val listOfArrayUser = arrayListOf<User>()
listOfArrayUser.addAll(listOf(user1, user2, user3))
var myNewList : List<String> = listOfArrayUser.stream().map { ("${it.name}-${it.city}") }.toList()
println( "My new list : " )
println( myNewList)
}
但是我没有正确的结果。,我该怎么做
(此答案仅适用于问题的修订版#1(
您有一个嵌套的用户集合,因此需要map
两次。为了避免以List<List<String>>
结束,Kotlin提供了一种flatMap
方法。
注意,stream()
来自Java世界,在Kotlin中不需要。您也不需要在主方法中有args
参数,映射后的toList()
也是多余的。
以下是您代码的固定版本:
data class User(var name: String, var age: Int, var city: String)
fun main() {
val user1 = User("John", 18, "Paris")
val user2 = User("Sara", 25, "Tokyo")
val user3 = User("Dave", 34, "Tunis")
var listOfArrayUser = listOf<Array<User>>(arrayOf(user1, user2, user3))
var myNewList : List<String> = listOfArrayUser.flatMap { it.map { "${it.name}-${it.city}" } }
println("My new list : ")
println(myNewList)
}
输出:
My new list :
[John-Paris, Sara-Tokyo, Dave-Tunis]
另外需要注意的是:数据类通常是不可变的,所以User
类可能看起来像这样(注意val
而不是var
(:
data class User(val name: String, val age: Int, val city: String)
我不知道为什么要使用流。你可以做
var myNewList : List<String> = listOfArrayUser.flatMap { it.toList() }.map { ("${it.name}-${it.city}") }