Kotlin学习——kt里的集合,Map的各种方法之String篇

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。

https://play.kotlinlang.org/byExample/01_introduction/02_Functions

其他关于kt的博客文章如下:

目录

引出


1.associateBy,groupBy聚合函数,返回最后一个合适的元素以及返回所有合适元素;

2.flatMap将集合的每个元素转换为一个可迭代对象;

3.map集合的\[\]运算符,getValue函数;

4.getOrElse也可以应用于Map以获取给定键的值

聚合函数associateBy,groupBy

函数associateBy和groupBy从由指定键索引的集合的元素构建映射。该键是在keySelector参数中定义的。您还可以指定一个可选的valueSelector来定义将存储在map元素的值中的内容。

associateBy和groupBy之间的区别在于它们如何处理具有相同键的对象:

  • associateBy使用最后一个合适的元素作为值。
  • groupBy构建一个所有合适元素的列表,并将其放入值中。
java 复制代码
package com.tianju.kt.collKt

data class Person(val name: String, val city: String, val phone: String)

fun main() {
    val persons = listOf<Person>(
        Person("peter","shanghai","12345"),
        Person("Shirley","nanjing","5648"),
        Person("watt","zero","12450"),
        Person("watt2","zero","12450")
    )

    // 键值对,值为最后一个满足条件的值
    val phoneBook = persons.associateBy { it.phone }
    // 键值对,值是一个list {12345=[Person(name=peter, city=shanghai, phone=12345)]
    val groupPhone = persons.groupBy { it.phone }
    println(phoneBook)
    println(groupPhone)

    //键值对,键为城市,值为人名的list {shanghai=[peter], nanjing=[Shirley], zero=[watt, watt]}
    val peopleCities = persons.groupBy(Person::city, Person::name)
    // 键值对,键为城市,值为最后一个满足条件的值
    val lastPersonCity = persons.associateBy(Person::city, Person::name)
    println(peopleCities)
    println(lastPersonCity)
}

flatMap展开

flatMap将集合的每个元素转换为一个可迭代对象,并构建一个转换结果列表。转换是用户定义的。

java 复制代码
package com.tianju.kt.collKt

val fruitsBag = listOf("apple","orange","banana","grapes")
val clothesBag = listOf("shirts","pants","jeans")

// 二维数组 [[apple, orange, banana, grapes], [shirts, pants, jeans]]
val cart = listOf(fruitsBag, clothesBag)

fun main() {
    println(cart)
    val mapBag = cart.map { it }
    // [apple, orange, banana, grapes, shirts, pants, jeans]
    val flatMapBag = cart.flatMap { it }
    println(mapBag)
    println(flatMapBag)
}

获得map的值 Map Element Access

当应用于映射时,\[\]运算符返回与给定键相对应的值,如果映射中没有这样的键,则返回null。

getValue函数返回与给定键对应的现有值,或者在未找到该键时抛出异常。对于使用withDefault创建的映射,getValue将返回默认值,而不是引发异常。

java 复制代码
package com.tianju.kt.collKt

import java.util.NoSuchElementException

fun main() {
    val map = mapOf("key" to 43)
    val value1 = map["key"]
    // 如果键不存在,会返回null
    val value2 = map["key2"]
    println(value1)
    println(value2)

    val value3 :Int = map.getValue("key")
    // 给map设置一个默认的值
    val mapWithDefault = map.withDefault { k ->"$k is null" }
    println(mapWithDefault)
    val value4 = mapWithDefault.getValue("keys")
    println(value4)

    try {
        val get = map.getValue("str")
    }catch (e: NoSuchElementException){
        println("msg:$e")
    }
}

getOrElse

getOrElse也可以应用于Map以获取给定键的值。

java 复制代码
package com.tianju.kt.collKt

fun main() {
    // Int后面有问号,值可以为null
    val map = mutableMapOf<String,Int?>()

    val orElse = map.getOrElse("x") { 1 }
    println(orElse)

    map["x"] = 3
    map["y"] = null
    println(map.getOrElse("x") { 1 })
    println(map.getOrElse("y") { 1 })
}

总结

1.associateBy,groupBy聚合函数,返回最后一个合适的元素以及返回所有合适元素;

2.flatMap将集合的每个元素转换为一个可迭代对象;

3.map集合的\[\]运算符,getValue函数;

4.getOrElse也可以应用于Map以获取给定键的值

相关推荐
caimouse13 分钟前
ReactOS 图形系统分析(51):元文件子系统 — metafile.c
c语言·开发语言
0566461 小时前
agent学习——流式响应与文本切分
网络·python·学习
学习星球1 小时前
Solid.js 实战:拆解官方 RealWorld 项目
开发语言·javascript·vue.js
OPEN-F1 小时前
Python进阶教程:正则表达式进阶与文本处理
开发语言·python·正则表达式
zhifou1234561 小时前
java 17升级安装
java·开发语言
for_ever_love__1 小时前
python基础语法学习: 面向对象的三大特性
开发语言·python·学习
不会代码的小猴2 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨2 小时前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5
ZJU_统一阿萨姆3 小时前
【算子开发】环境搭建与第一个CUDA程序
开发语言·人工智能·系统架构
Evand J3 小时前
【MATLAB例程,车联网8】MPC网联车辆节能跟驰控制:速度跟踪、间距约束与能耗优化。附MATLAB完整代码的下载链接
开发语言·matlab·车联网·调度·mpc·节能·车辆控制