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

news2025/2/23 7:37:58

在这里插入图片描述

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里的集合
    • List
    • Set
    • Map
  • List集合的各种方法
    • filter过滤
    • map 所有元素
    • any,all,none
    • first,last首尾
    • count统计
    • partition隔断
    • minOrNul,maxOrNull 最小和最大
    • sort排序
    • getOrElse 安全访问
    • 所有代码
  • 总结

引出


1.kt里的集合List,Set,Map,可变集合和不可变集合;
2.list集合支持的各种方法,类似于Java里面的流stream;

kotlin里的集合

List

列表是项目的有序集合。在Kotlin中,列表可以是可变的(MutableList),也可以是只读的(List)。对于列表创建,对于只读列表使用标准库函数listOf(),对于可变列表使用mutableListOf()。为了防止不必要的修改,可以通过将可变列表强制转换为List来获得可变列表的只读视图。

package com.tianju.collKt

// 创建一个可变列表
val systemUsers: MutableList<Int> = mutableListOf(1, 2, 3)
// 不可变列表,不能改变元素,相当于只读列表
val sudoers: List<Int> = systemUsers

/**
 * 可变列表可以增加元素
 */
fun addSystemUser(newUser: Int) {
    systemUsers.add(newUser)
}

/**
 * 返回只读列表
 */
fun getSysSudoers(): List<Int> {
    return sudoers
}

fun main() {
    addSystemUser(4)
    println("Tot sudoers: ${getSysSudoers().size}")
    getSysSudoers().forEach {
            i -> println("Some useful info on user $i")
    }
}

Set

set是不支持重复项的无序集合

package com.tianju.collKt

val openIssues: MutableSet<String> = mutableSetOf("uniqueDescr1", "uniqueDescr2", "uniqueDescr3")

/**
 * 给set 里面添加元素
 */
fun addIssue(uniqueDesc: String): Boolean {
    return openIssues.add(uniqueDesc)
}

/**
 * 返回日志
 */
fun getStatusLog(isAdded: Boolean): String {
    return if (isAdded) "registered correctly." else "marked as duplicate and rejected."
}

fun main() {
    val aNewIssue: String = "uniqueDescr4"
    val anIssueAlreadyIn: String = "uniqueDescr2"

    println("Issue $aNewIssue ${getStatusLog(addIssue(aNewIssue))}")
    println("Issue $anIssueAlreadyIn ${getStatusLog(addIssue(anIssueAlreadyIn))}")
}

Map

映射是键/值对的集合,其中每个键都是唯一的,用于检索相应的值。对于创建映射,有函数mapOf()和mutableMapOf()。使用to infix函数可以减少初始化的噪声。可变映射的只读视图可以通过将其强制转换为map来获得。

package com.tianju.collKt

const val POINTS_X_PASS: Int = 15
val EZPassAccounts: MutableMap<Int, Int> = mutableMapOf(1 to 100, 2 to 100, 3 to 100)
// 创建一个只读map
val EZPassReport: Map<Int, Int> = EZPassAccounts

fun updatePointsCredit(accountId: Int) {
    // 检查key是否存在
    if (EZPassAccounts.containsKey(accountId)) {
        println("Updating $accountId...")
        EZPassAccounts[accountId] = EZPassAccounts.getValue(accountId) + POINTS_X_PASS
    } else {
        println("Error: Trying to update a non-existing account (id: $accountId)")
    }
}

// 打印key:value
fun accountsReport() {
    println("EZ-Pass report:")
    EZPassReport.forEach {
            k, v -> println("ID $k: credit $v")
    }
}

fun main() {
    accountsReport()
    updatePointsCredit(1)
    updatePointsCredit(1)
    updatePointsCredit(5)
    accountsReport()
}

List集合的各种方法

filter过滤

val nums = listOf(1,3,5,6,3,-4,-3)

// 过滤
val postNums = nums.filter { x -> x>0 }
val negNums = nums.filter { it < 0 }

map 所有元素

// map函数,作用于所有元素
val doubled = nums.map { x->x*2 }
val tripled = nums.map { it*3 }

any,all,none

返回值为Boolean

// any, all, none
// 返回值为Boolean 布尔
val anyPost = nums.any { it>0 }
val allEven = nums.all { it%2 ==0 }
val allLess6 = nums.none { it>7 }

first,last首尾

// 第一个元素,最后一个元素
val firstNum = nums.first()
val lastNum = nums.last()
// 可以传一个表达式
val firstEven = nums.first { it%2==0 }

count统计

// count
val totalNums = nums.count()
val evenCount = nums.count {it%2==0}

partition隔断

按照条件分割成两个阵营

// partition 隔断
// ([6, -4], [1, 3, 5, 3, -3])
val evenOdd = nums.partition { it%2 ==0 }
println(evenOdd.first)

minOrNul,maxOrNull 最小和最大

minOrNull和maxOrNull函数返回集合中最小和最大的元素。如果集合为空,则返回null。

// minOrNull和maxOrNull函数返回集合中最小和最大的元素。如果集合为空,则返回null。
val numbers = listOf(1, 2, 3)
val empty = emptyList<Int>()
val only = listOf(3)

sort排序

// 排序sorted
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 { kotlin.math.abs(it) }

getOrElse 安全访问

getOrElse提供对集合元素的安全访问。它采用一个索引和一个函数,该函数在索引越界时提供默认值。

// getOrElse
val get1 = nums.getOrElse(1){56}
val get100 = nums.getOrElse(100){200}

所有代码

package com.tianju.collKt


val nums = listOf(1,3,5,6,3,-4,-3)

// 过滤
val postNums = nums.filter { x -> x>0 }
val negNums = nums.filter { it < 0 }

// map函数,作用于所有元素
val doubled = nums.map { x->x*2 }
val tripled = nums.map { it*3 }

// any, all, none
// 返回值为Boolean 布尔
val anyPost = nums.any { it>0 }
val allEven = nums.all { it%2 ==0 }
val allLess6 = nums.none { it>7 }

// 第一个元素,最后一个元素
val firstNum = nums.first()
val lastNum = nums.last()
// 可以传一个表达式
val firstEven = nums.first { it%2==0 }

// count
val totalNums = nums.count()
val evenCount = nums.count {it%2==0}

// partition 隔断
// ([6, -4], [1, 3, 5, 3, -3])
val evenOdd = nums.partition { it%2 ==0 }

// minOrNull和maxOrNull函数返回集合中最小和最大的元素。如果集合为空,则返回null。
val numbers = listOf(1, 2, 3)
val empty = emptyList<Int>()
val only = listOf(3)

// 排序sorted
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 { kotlin.math.abs(it) }

// getOrElse
val get1 = nums.getOrElse(1){56}
val get100 = nums.getOrElse(100){200}

fun main() {
    println("positives is $postNums")
    println(tripled)

    println(anyPost)
    println(allEven)
    println(allLess6)

    println(firstEven)

    println()
    println(evenOdd)
    println(evenOdd.first)

    println("Numbers: $numbers, min = ${numbers.minOrNull()} max = ${numbers.maxOrNull()}")
    println("Empty: $empty, min = ${empty.minOrNull()}, max = ${empty.maxOrNull()}")
    println("Only: $only, min = ${only.minOrNull()}, max = ${only.maxOrNull()}")

    println(get100)
}

总结

1.kt里的集合List,Set,Map,可变集合和不可变集合;
2.list集合支持的各种方法,类似于Java里面的流stream;

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

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

相关文章

【代码】考虑电解槽变载启停特性与阶梯式碳交易机制的综合能源系统优化调度matlab-yalmip-cplex/gurob

程序名称&#xff1a;考虑电解槽变载启停特性与阶梯式碳交易机制的综合能源系统优化调度 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 代码简介&#xff1a;提出了一种考虑 变载启停特性的电解槽混合整数线性模型&#xff0c;根据电 氢负荷可以实时调整设备工作状态&…

android系统新特性——用户界面以及系统界面改进

用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言&#xff0c;它是一套完整的设计系统&#xff0c;包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述&#xff0c;让开发者设计出更符合目标的软件&#xff0c…

代码随想录算法训练营 ---第四十三天

前言&#xff1a; 今天同样是01背包问题&#xff0c;今天详细学习了背包问题在各种场景下的应用。今天一道也没做出来&#xff0c;有点废。好难啊&#xff01;就是思路不太清晰&#xff0c;不知道如何去做&#xff0c;看了题解后感觉原来如此&#xff0c;但是想不出来。今天做…

蓝桥杯官网算法赛(蓝桥小课堂)

问题描述 蓝桥小课堂开课啦&#xff01; 海伦公式&#xff08;Herons formula&#xff09;&#xff0c;也称为海伦-秦九韶公式&#xff0c;是用于计算三角形面积的一种公式&#xff0c;它可以通过三条边的长度来确定三角形的面积&#xff0c;而无需知道三角形的高度。 海伦公…

②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Sharding-JDBC Sharding-JDBC介绍使用 Shardin…

cmake install接口常用方式介绍

cmake install接口常用方式介绍 1 Synopsis2 Introduction2.1 DESTINATION <dir>2.2 PERMISSIONS <permission>...2.3 CONFIGURATIONS <config>...2.4 COMPONENT <component>2.5 EXCLUDE_FROM_ALL2.6 RENAME <name>2.7 OPTIONAL 3 Signatures4 E…

<JavaEE> 线程的五种创建方法 和 查看线程的两种方式

目录 一、线程的创建方法 1.1 继承 Thread -> 重写 run 方法 1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法 1.3 实现 Runnable 接口 -> 重写 run 方法 1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法 1.5 使用 lambda 表达式 二…

Redis面试题:redis做为缓存,数据的持久化是怎么做的?两种持久化方式有什么区别呢?这两种方式,哪种恢复的比较快呢?

目录 面试官&#xff1a;redis做为缓存&#xff0c;数据的持久化是怎么做的&#xff1f; 面试官&#xff1a;这两种持久化方式有什么区别呢&#xff1f; 面试官&#xff1a;这两种方式&#xff0c;哪种恢复的比较快呢&#xff1f; 面试官&#xff1a;redis做为缓存&#xff…

Element-Plus 图标自动导入

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

【RTP】RTPSenderAudio::SendAudio

RTPSenderAudio 可以将一个opus帧封装为rtp包进行发送,以下是其过程:RTPSenderAudio::SendAudio :只需要提供payload部分 创建RtpPacketToSend 并写入各个部分 填充payload部分 sender 本身分配全session唯一的twcc序号 if (!rtp_sender_->

终端移动性管理

联系前面所学的知识我们知道&#xff0c;移动性管理主要分为两大类&#xff1a;空闲状态下的移动性管理、连接状态下的移动性管理。我们今天来详细了解他们的工作原理~ 目录 移动性管理分类 1、空闲状态下的移动性管理 2、连接状态下的移动性管理 手机选择天线的原则 4G天…

香港站群服务器中1C/2C/4C/8C 的概念及区别

​  在选择香港站群服务器时&#xff0c;经常会看到1C、2C、4C和8C等不同的IP段。这些IP段代表了不同的子网掩码长度&#xff0c;也反映了服务器的IP地址数量和丰富性。 让我们来了解一下什么是IP段。IP段是指一组连续的IP地址&#xff0c;其中每个地址的前三个数字相同&…

从0到0.01入门 Webpack| 006.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

在 Go 中使用 Protocol Buffers

各位准备好了吗&#xff01;这一次&#xff0c;我们将深入探讨 Protocol Buffers&#xff08;protobuf&#xff09;及其在数据序列化中的超能力所在。 介绍 Protocol Buffers&#xff0c;也被称为 protobuf&#xff0c;是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

牛客 算法 HJ103 Redraiment的走法 golang语言实现

题目 HJ103 Redraiment的走法 实现 package mainimport ("bufio""fmt""os""strconv""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)nums : make([]int, 0)nums_len:0dp:make([]int, 0)for scanner.Scan()…

2023金盾杯线上赛-AGRT战队-WP

目录 WEB ApeCoin get_source ezupload easyphp MISC 来都来了 芙宁娜 Honor Crypto 我看看谁还不会RSA hakiehs babyrsa PWN sign-format RE Re1 WEB ApeCoin 扫描发现有源码泄露&#xff0c;访问www.tar.gz得到源码。 在源码中发现了冰蝎马。 Md5解码&am…

常见位运算的详讲!

今日为大家详细讲解一番关于常见位运算的操作&#xff0c;本文主要介绍一些位运算的操作符&#xff0c;然后再通过简单->中等->困难的例题&#xff0c;让大家彻底搞懂关于位运算的知识&#xff01; 位运算的介绍&#xff01; 1.基础位运算 ">>"右移操作…

c语言练习12周(6~10)

以下程序调用递归函数fun实现求n!&#xff0c;请补充代码。 题干以下程序调用递归函数fun实现求n!&#xff0c;请补充代码。 int fun(int n) { int c; /****************/ /****************/ else cn*fun(n-1); …

1.3 取反器和8位取反器

取反器真值表: 取反开关输入输出011000110101 取反器相当于一个异或门 8位取反器

Canvas艺术之旅:探索锚点抠图的无限可能

说在前面 在日常的图片处理中&#xff0c;我们经常会遇到需要抠图的情况&#xff0c;无论是为了美化照片、制作海报&#xff0c;还是进行图片合成。抠图对于我们来说也是一种很常用的功能了&#xff0c;今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能。 效果展示…