如何在kotlin中流式传输数组对象的映射列表



我是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}") }

最新更新