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

在这里插入图片描述

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

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

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

  • Kotlin学习——hello kotlin & 函数function & 变量 & 类 + 泛型 + 继承
  • Kotlin学习——流程控制,when,循环,range工具 & kt里的equals & if实现类似三元表达式的效果
  • Kotlin学习——kt中的类,数据类 & 枚举类 & 密封类,以及对象
  • Kotlin学习——kt里面的函数,高阶函数 & 函数式编程 & 扩展函数和属性
  • Kotlin学习——kt里的集合List,Set,Map & List集合的各种方法之Int篇

目录

  • 引出
    • 聚合函数associateBy,groupBy
    • flatMap展开
    • 获得map的值 Map Element Access
    • getOrElse
  • 总结

引出


1.associateBy,groupBy聚合函数,返回最后一个合适的元素以及返回所有合适元素;
2.flatMap将集合的每个元素转换为一个可迭代对象;
3.map集合的[]运算符,getValue函数;
4.getOrElse也可以应用于Map以获取给定键的值

聚合函数associateBy,groupBy

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

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

  • associateBy使用最后一个合适的元素作为值。
  • groupBy构建一个所有合适元素的列表,并将其放入值中。
package com.tianju.kt.collKtdata 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将集合的每个元素转换为一个可迭代对象,并构建一个转换结果列表。转换是用户定义的。

package com.tianju.kt.collKtval 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将返回默认值,而不是引发异常。

在这里插入图片描述

package com.tianju.kt.collKtimport java.util.NoSuchElementExceptionfun main() {val map = mapOf("key" to 43)val value1 = map["key"]// 如果键不存在,会返回nullval 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以获取给定键的值。

package com.tianju.kt.collKtfun main() {// Int后面有问号,值可以为nullval map = mutableMapOf<String,Int?>()val orElse = map.getOrElse("x") { 1 }println(orElse)map["x"] = 3map["y"] = nullprintln(map.getOrElse("x") { 1 })println(map.getOrElse("y") { 1 })
}

总结

1.associateBy,groupBy聚合函数,返回最后一个合适的元素以及返回所有合适元素;
2.flatMap将集合的每个元素转换为一个可迭代对象;
3.map集合的[]运算符,getValue函数;
4.getOrElse也可以应用于Map以获取给定键的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++——vector插入与删除和数据存取

一. vector插入和删除 功能描述:对vector容器进行插入、删除操作 函数原型: push back(ele); //尾部插入元素ele pop_back(); //删除最后一个元素 insert(const iterator pos, el…

MFC 读写注册表

在MFC (Microsoft Foundation Classes) 中读写注册表涉及到使用 CRegKey 类&#xff0c;这个类提供了一组方法来操作Windows注册表。以下是如何使用MFC来读取和写入注册表值的基本步骤&#xff1a; 写入注册表值 创建或打开注册表项: 使用 CRegKey::Create 或 CRegKey::Open 方…

LuatOS-SOC接口文档(air780E)--rsa - RSA加密解密

示例 -- 请在电脑上生成私钥和公钥, 当前最高支持4096bit, 一般来说2048bit就够用了 -- openssl genrsa -out privkey.pem 2048 -- openssl rsa -in privkey.pem -pubout -out public.pem -- privkey.pem 是私钥, public.pem 是公钥 -- 私钥用于 加密 和 签名, 通常保密, 放在…

acwing算法基础之动态规划--背包问题

目录 1 基础知识2 模板3 工程化 1 基础知识 &#xff08;零&#xff09; 背包问题描述&#xff1a;有 N N N个物品&#xff0c;每个物品的体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​&#xff0c;现有容量是 V V V的背包&#xff0c;求这个背包能装下的物品的最大价值…

C#中的警告CS0120、CS0176、CS0183、CS0618、CS0649、CS8600、CS8601、CS8602、CS8604、CS8625及处理

目录 一、CS0120 二、CS0176 1.解决前 2.解决后 3.解决办法 三、CS0183 四、CS0618 五、CS8600 六、CS8602 七、CS8622 1. 解决前&#xff1a; 2. 解决后&#xff1a; 3.解决方法&#xff1a; 八、CS8604和CS8625 九、CS0649 十、CS8601 一、CS0120 严重性 代…

【算法萌新闯力扣】:回文链表

力扣题目&#xff1a;回文链表 开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦&#xff01;那从现在起&#xff0c;我的算法题更新会按照算法村的给的路线更新&#xff0c;更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知…

pandas教程:Techniques for Method Chaining 方法链接的技巧

文章目录 12.3 Techniques for Method Chaining&#xff08;方法链接的技巧&#xff09;1 The pipe Method&#xff08;pipe方法&#xff09; 12.3 Techniques for Method Chaining&#xff08;方法链接的技巧&#xff09; 对序列进行转换的时候&#xff0c;我们会发现会创建很…

操作系统的中断与异常(408常考点)

为了进行核心态和用户态两种状态的切换&#xff0c;引入了中断机制。 中断是计算机系统中的一种事件&#xff0c;它会打断CPU当前正在执行的程序&#xff0c;转而执行另一个程序或者执行特定的处理程序。中断可以来自外部设备&#xff08;如键盘、鼠标、网络等&#xff09;、软…

1072 Gas Station (最短路径同时求最短路,最长路,总路径)

题意&#xff1a;给定几处居民住所与几处预选加油站点&#xff0c;求离最近的居民住所最远且所有居民都在该站点服务区内的加油站点&#xff0c;如果有多个&#xff0c;则选择平均距离最小的&#xff0c;再有多个&#xff0c;选择序号最小的。 思路&#xff1a;刚开始不知道未…

振南技术干货集:FFT 你知道?那数字相敏检波 DPSD 呢?(1)

注解目录 1 、DPSD 的基础知识 1.1 应用模型 1.2 原理推导 1.3 硬件 PSD &#xff08;相敏检波&#xff0c;就是从繁乱复杂的信号中将我们关心的信号检出来&#xff0c;同时对相位敏感。 数学原理&#xff0c;逃不掉的&#xff0c;硬着头皮看吧。&#xff09; 2 、DPSD …

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用&#xff0c;我们需要形成电阻器颜色代码系统以便能够识别…

LuatOS-SOC接口文档(air780E)--repl - “读取-求值-输出” 循环

示例 --[[ 本功能支持的模块及对应的端口 模块/芯片 端口 波特率及其他参数 Air101/Air103 UART0 921600 8 None 1 Air105 UART0 1500000 8 None 1 ESP32C3 UART0 921600 8 None 1 -- 注意, 简约版(无CH343)不支持 ESP32C2 …

Java 注解在 Android 中的使用场景

Java 元注解有 5 种&#xff0c;常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别&#xff0c;有三种&#xff1a; RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中&#xff0c;并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…

力扣104. 二叉树的最大深度

目录 1.解题思路2.代码实现 1.解题思路 如果我们知道了左子树和右子树的最大深度&#xff0c;那么该二叉树的最大深度即为大的深度加一,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言&#x…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

Doris的PROPERTIES与ENGINE(九)

接上篇----------Doris分区与分桶 在建表语句的最后 PROPERTIES 中&#xff0c;可以指定以下两个参数&#xff1a; replication_num 每个 Tablet 的副本数量。默认为 3&#xff0c;建议保持默认即可。在建表语句中&#xff0c;所有 Partition 中的 Tablet 副本数量统一指定。…

【论文阅读】TACAN:控制器局域网中通过隐蔽通道的发送器认证

文章目录 摘要一、引言二、相关工作三、系统和对手模型3.1 系统模型对手模型 四、TACAN4.1 TACAN 架构4.2 发送方认证协议4.3 基于IAT的隐蔽通道4.4 基于偏移的隐蔽通道&#xff08;本节公式格式暂未整理&#xff09;4.5 基于LSB的隐蔽通道 摘要 如今&#xff0c;汽车系统与现…

一个GPU版本的遗传算法迭代xgboost最优参数的示例,这里用的是自定义损失函数

一个简单的遗传算法迭代xgboost最优参数的示例&#xff0c;这里用的是自定义损失函数 import pandas as pd import numpy as np import xgboost as xgb from sko.GA import GA from sklearn.model_selection import train_test_split from sklearn.linear_model import Logisti…

vscode Markdown 预览样式美化多方案推荐

优雅的使用 vscode写 Markdown&#xff0c;预览样式美化 1 介绍 我已经习惯使用 vscode 写 markdown。不是很喜欢他的 markdown 样式&#xff0c;尤其是代码块高亮的样式。当然用 vscode 大家基本上都会选择安装一个Markdown-preview-enhanced的插件&#xff0c;这个插件的确…

SpringBoot定时任务报错Unexpected error occurred in scheduled task原因及其解决方法(亲测有效)

问题 spring boot项目在线上一直正常运行没有错误&#xff0c;然后今天发生了报错&#xff0c;如图 这是一个定时器错误&#xff0c;发生这个报错 主要有两个原因 定时器编写的有错误Scheduled注解方式级别高于资源注入级别&#xff0c;导致了资源注入失败 以下是我的代码 …