Kotlin 15. Kotlin List 的使用 2:associateBy,groupBy,partition,flatMap,minOrNull,sorted,zip

一起来学Kotlin:概念:15. Kotlin List 的使用2:associateBy,groupBy,partition,flatMap,minOrNull,sorted,zip,getOrElse

上一章中,我们介绍了 List 函数:

  • filter
  • map
  • count
  • first,last
  • any, all, none
  • find,findLast

这里我们介绍 List 中

  • associateBy, groupBy
  • partition
  • flatMap
  • minOrNull, maxOrNull
  • sorted,sortedBy
  • zip
  • getOrElse


1 associateBy, groupBy

函数 associateBygroupBy 构建来自由指定键索引的集合的元素的映射。key 在 keySelector 参数中定义。我们还可以指定可选的 valueSelector 来定义将存储在 map 元素值中的内容。

区别:associateBygroupBy 之间的区别在于它们如何使用相同的键处理对象:

  • associateBy 使用最后一个合适的元素作为值。
  • groupBy 构建所有合适元素的列表并将其放入值中。
fun main()
{
    data class Person(val name: String, val city: String, val phone: String) 

    val people = listOf(                                                     
        Person("John", "Boston", "+1-888-123456"),
        Person("Sarah", "Munich", "+49-777-789123"),
        Person("Svyatoslav", "Saint-Petersburg", "+7-999-456789"),
        Person("Vasilisa", "Saint-Petersburg", "+7-999-123456"))

    val phoneBook = people.associateBy { it.phone }                          
    val cityBook = people.associateBy(Person::phone, Person::city)           
    val peopleCities = people.groupBy(Person::city, Person::name)            
    val lastPersonCity = people.associateBy(Person::city, Person::name)      

    println("phoneBook: ${phoneBook}")      // 打印 phoneBook: {+1-888-123456=Person(name=John, city=Boston, phone=+1-888-123456), +49-777-789123=Person(name=Sarah, city=Munich, phone=+49-777-789123), +7-999-456789=Person(name=Svyatoslav, city=Saint-Petersburg, phone=+7-999-456789), +7-999-123456=Person(name=Vasilisa, city=Saint-Petersburg, phone=+7-999-123456)}
    println("cityBook: ${cityBook}")        // 打印 cityBook: {+1-888-123456=Boston, +49-777-789123=Munich, +7-999-456789=Saint-Petersburg, +7-999-123456=Saint-Petersburg}
    println("peopleCities: ${peopleCities}")    // 打印 peopleCities: {Boston=[John], Munich=[Sarah], Saint-Petersburg=[Svyatoslav, Vasilisa]}
    println("lastPersonCity: ${lastPersonCity}")    // 打印 lastPersonCity: {Boston=John, Munich=Sarah, Saint-Petersburg=Vasilisa}
}

2 partition

partition函数通过给定的条件将原始的列表一分为二。

fun main()
{
    val numbers = listOf(1, -2, 3, -4, 5, -6)                
    val evenOdd = numbers.partition { it % 2 == 0 }             
    val (positives, negatives) = numbers.partition { it > 0 }   

    println("evenOdd: ${evenOdd}")          // 打印 evenOdd: ([-2, -4, -6], [1, 3, 5])
    println("positives: ${positives}")      // 打印 positives: [1, 3, 5]
    println("negatives: ${negatives}")      // 打印 negatives: [-2, -4, -6]
}

3 flatMap

flatMap 将列表集合的每个元素转换为可迭代对象,并生成转换结果的单个列表。

fun main()
{
    val fruitsBag = listOf("apple","orange","banana","grapes")  
    val clothesBag = listOf("shirts","pants","jeans")           
    val cart = listOf(fruitsBag, clothesBag)                    
    val mapBag = cart.map { it }                                
    val flatMapBag = cart.flatMap { it } 

    println("cart: ${cart}")        // 打印 cart: [[apple, orange, banana, grapes], [shirts, pants, jeans]]  
    println("mapBag: ${mapBag}")    // 打印 mapBag: [[apple, orange, banana, grapes], [shirts, pants, jeans]]
    println("flatMapBag: ${flatMapBag}")    // 打印 flatMapBag: [apple, orange, banana, grapes, shirts, pants, jeans]
}

4 minOrNull, maxOrNull

就像字面意思所描述的,minOrNull 以及 maxOrNull 返回列表集合的最小和最大元素。如果集合为空,则返回 null。

fun main()
{
    val numbers = listOf(1, 2, 3)
    val empty = emptyList<Int>()
    val only = listOf(3)

    println("Numbers: $numbers, min = ${numbers.minOrNull()} max = ${numbers.maxOrNull()}")            // 打印 Numbers: [1, 2, 3], min = 1 max = 3
    println("Empty: $empty, min = ${empty.minOrNull()}, max = ${empty.maxOrNull()}")            // 打印 Empty: [], min = null, max = null
    println("Only: $only, min = ${only.minOrNull()}, max = ${only.maxOrNull()}")            // 打印 Only: [3], min = 3, max = 3
}

5 sorted,sortedBy

sorted 返回根据其自然排序顺序(升序)排序的集合元素的列表。sortedBy 根据某些条件对元素进行排序。

import kotlin.math.abs

fun main() {

    val shuffled = listOf(5, 4, 2, 1, 3, -10)                   
    val natural = shuffled.sorted()                             
    val inverted = shuffled.sortedBy { -it }                    
    val descending = shuffled.sortedDescending()                
    val descendingBy = shuffled.sortedByDescending { abs(it)  } 

    println("Shuffled: $shuffled")          // 打印 Shuffled: [5, 4, 2, 1, 3, -10]
    println("Natural order: $natural")      // 打印 Natural order: [-10, 1, 2, 3, 4, 5]
    println("Inverted natural order: $inverted")    // 打印 Inverted natural order: [5, 4, 3, 2, 1, -10]
    println("Inverted natural order value: $descending")    // 打印 Inverted natural order value: [5, 4, 3, 2, 1, -10]
    println("Inverted natural order of absolute values: $descendingBy") // 打印 Inverted natural order of absolute values: [-10, 5, 4, 3, 2, 1]
}

6 zip

zip 函数将两个给定集合合并到一个新集合中。默认情况下,结果集合包含具有相同索引的源集合元素对。但是,我们可以定义自己的结果集合元素的结构。

fun main() {

    val A = listOf("a", "b", "c")                  
    val B = listOf(1, 2, 3, 4)                     
    val resultPairs = A zip B                      
    val resultReduce = A.zip(B) { a, b -> "$a$b" } 

    println("A to B: $resultPairs")     // 打印 A to B: [(a, 1), (b, 2), (c, 3)]
    println("\$A\$B: $resultReduce")    // 打印 $A$B: [a1, b2, c3]
}

7 getOrElse

getOrElse 采用索引来 get 列表集合中的某个元素,如果该索引超出列表的最大长度,那么会返回提供的一个默认值。

fun main() {
    val list = listOf(0, 10, 20)
    println(list.getOrElse(1) { 42 })    // 打印 10
    println(list.getOrElse(10) { 42 })   // 打印 42
}

getOrElse 也可以被用于 Map 中来获取 key 对应的 value。

fun main() {

    val map = mutableMapOf<String, Int?>()
    println(map.getOrElse("x") { 1 })       // 打印 1

    map["x"] = 3
    println(map.getOrElse("x") { 1 })       // 打印 3

    map["x"] = null
    println(map.getOrElse("x") { 1 })       // 打印 1
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
通过使用flatMap函数,可以将一个列表中的每个元素进行变换,并将结果合并为一个新的列表。flatMap函数将每个元素映射为一个列表,并将这些列表合并为一个新的列表。在引用和中提供了使用flatMap函数的示例代码。在这些示例中,我们有一个整数列表list,通过使用flatMap函数,将每个元素映射为一个新的列表,并将这些列表合并为一个新的列表。在这个新的列表中,我们可以对每个元素进行操作或者打印。flatMap函数可以用于处理复杂的数据操作,例如列表中的嵌套列表。在引用中提供了更多关于Kotlin List使用示例。123 #### 引用[.reference_title] - *1* *2* [kotlin有关mapflatMap](https://blog.csdn.net/new_abc/article/details/82983844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [ Kotlin List使用 2:associateBygroupBy,partitionflatMapminOrNullsortedzip](https://blog.csdn.net/zyctimes/article/details/127814401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破浪会有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值