变换transform
map flatMap
map返回的变换后的集合 中的元素个数 必须和 输入的集合(原始集合)的个数一样,不过,返回变换后的新集合里的元素可以是不同类型的
val animals = listOf("zebra", "giraffe", "elephant", "rat")
val babies = animals
.map { it } //此时集合变成 : [zebra, giraffe, elephant, rat]
.map {it-> "the $it"} //此时集合变成 :[the zebra, the giraffe, the elephant, the rat]
.map { animal -> "A baby $animal"} //此时集合变成 : [A baby the zebra, A baby the giraffe, A baby the elephant, A baby the rat]
// .map { baby -> "$baby,with the cutest little tail ever!" }
println(animals)//原始集合:[zebra, giraffe, elephant, rat]
println(babies) //最终变换的集合: [A baby the zebra, A baby the giraffe, A baby the elephant, A baby the rat]
val animalsLength = animals.map {it-> it.length }
println(animalsLength) //变换成的集合:[5, 7, 8, 3] 类型 int 类型
flatMap
flatMap 操作的一个原始集合里的所有元素都是集合,并将多个集合中的所有元素合并成一个包含了所有元素的一个单一集合。
val result = listOf(listOf(1,2,3), listOf(4,5,6)).flatMap { it }
println(result) //1 2 3 4 5 6
过滤filter
val result = listOf("Jack","Jimmy","Rose","Tom")
.filter { it.contains("J") }
println(result)//[Jack, Jimmy]
val items = listOf(
listOf("red apple", "green apple", "blue apple"),
listOf("red fish", "blue fish"),
listOf("yellow banana", "teal banana")
)
val redItems1 = items.flatMap {it }
println(redItems1) //[red apple, green apple, blue apple, red fish, blue fish, yellow banana, teal banana]
val redItems2 = items.flatMap { it.filter { it.contains("red") }}
println(redItems2) //[red apple, red fish]
合并 combine
zip合并函数:合并2个函数,返回一个键值对的新集合。
val employees = listOf("Jack", "Jason", "Tommy")
val shirtSize = listOf("large", "x-large", "medium")
val employeeShirtSizes1 = employees.zip(shirtSize)
println(employeeShirtSizes1) //[(Jack, large), (Jason, x-large), (Tommy, medium)]
val employeeShirtSizes2 = employees.zip(shirtSize).toMap()
println(employeeShirtSizes2) //转为map集合: {Jack=large, Jason=x-large, Tommy=medium}
println(employeeShirtSizes2["Jack"]) //large