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

在这里插入图片描述

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.mfbz.cn/a/189025.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自动化部署 扩容openGauss —— Ansible for openGauss

前言 大家好&#xff0c;今天我们为大家推荐一套基于Ansible开发的&#xff0c;自动化部署及扩容openGauss的脚本工具&#xff1a;Ansible for openGauss&#xff08;以下简称 AFO&#xff09;。 通过AFO&#xff0c;我们只需简单修改一些配置文件&#xff0c;即可快速部署多种…

JavaScript基础—运算符、表达式和语句、分支语句、循环语句、综合案例-ATM存取款机

版本说明 当前版本号[20231125]。 版本修改说明20231125初版 目录 文章目录 版本说明目录JavaScript 基础 - 第2天运算符算术运算符赋值运算符自增/自减运算符比较运算符逻辑运算符运算符优先级 语句表达式和语句分支语句if 分支语句if双分支语句if 多分支语句三元运算符&am…

人工智能时代的内容写作

内容不再只是王道&#xff0c;正如俗话所说&#xff1a;它是一种流动的货币&#xff0c;推动了巨大的在线信息和影响力经济。 每个品牌都是一个故事&#xff0c;通过其服务和商品讲述自己。尽管如此&#xff0c;大多数客户还是会通过您的在线内容最了解您。 但随着我们进入人…

鸿蒙HarmonyOS 编辑器 下载 安装

好 各位 之前的文章 注册并实名认证华为开发者账号 我们基实名注册了华为的开发者账号 我们可以访问官网 https://developer.harmonyos.com/cn/develop/deveco-studio 在这里 直接就有我们编辑器的下载按钮 我们直接点击立即下载 这里 我们根据自己的系统选择要下载的系统 例…

Linux操作系统之apt常用命令记录

文章目录 apt 命令apt 语法apt 常用命令列出所有可更新的软件清单命令升级软件包列出可更新的软件包及版本信息升级软件包&#xff0c;升级前先删除需要更新软件包安装指定的软件命令&#xff1a;安装多个软件包&#xff1a;更新指定的软件命令显示软件包具体信息,例如&#xf…

MYSQL基础之【创建数据表,删除数据表】

文章目录 前言MySQL 创建数据表通过命令提示符创建表使用PHP脚本创建数据表 MySQL 删除数据表在命令提示窗口中删除数据表使用PHP脚本删除数据表 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主…

搜索 C. Tic-tac-toe

Problem - C - Codeforces 思路&#xff1a;搜索&#xff0c;判断合法性。从起始态用搜索进行模拟&#xff0c;这样可以避免后面判断合法性这一繁琐的步骤。用一个map进行映射当前态及对应的结果。剪枝&#xff1a;如果当前字符串已经被搜索过&#xff0c;则直接跳过去。 代码…

如何在3dMax中根据AutoCAD地形规划文件对地形进行建模?

在3dMax中根据Autocad地形规划文件对地形进行建模的方法 直入主题&#xff0c;要根据包含地形图的DWG (Autocad) 文件进行地形建模&#xff0c;方法步骤如下&#xff1a; 1.运行3dmax软件&#xff0c;点击“文件&#xff08;File&#xff09;->导入&#xff08;Import&…

【RTP】RTPSenderAudio::SendAudio

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

pandas根据列正逆序排序

题目&#xff1a;根据 buy_quantity 列进行排名&#xff0c;相同值分配相同的最低排名。 import pandas as pd# 创建一个示例 DataFrame data {item_id: [1, 2, 3, 4, 5, 6, 7], buy_quantity: [1, 2, 2, 3, 3, 4, 5]} df pd.DataFrame(data)# 使用 rank() 函数为 buy_quant…

NX二次开发UF_CURVE_ask_int_parms 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms Defined in: uf_curve.h int UF_CURVE_ask_int_parms(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_objects_set_…

2. 寄存器

锁存器,用于存储1位的电路 只有当 可写位(write enable)开启,才会把输入写到输出,同时保存输出 使用锁存器 带时钟的锁存器 带时钟带可写控制的完整版锁存器 下面的时钟使用按钮来代替, 只有按钮为1时,相连的电路才工作时钟的作用在于协同所有电路共同工作,也是一切电路自动化…

android shape绘制半圆

<?xml version"1.0" encoding"utf-8"?><shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"rectangle"><sizeandroid:width"20dp"android:height"10dp" /><…

代码随想录算法训练营第五十五天|583. 两个字符串的删除操作 72. 编辑距离

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 583. 两个字符串的删除操作 class Solution:def minDistance(self, word1: str, word2: str) -> int:dp [[0] * (len(word2)1) for _ in range(…

Node.js下载安装及配置镜像源

一、进入官网地址下载安装包 https://nodejs.org/dist 选择对应你系统的Node.js版本 这里我选择的是Windows系统、64位 二、安装程序 &#xff08;1&#xff09;下载完成后&#xff0c;双击安装包&#xff0c;开始安装Node.js (2)直接点【Next】按钮&#xff0c;此处可根据…

数字逻辑电路基础-时序逻辑电路之移位寄存器

文章目录 一、移位寄存器定义二、verilog源码三、仿真结果 一、移位寄存器定义 移位寄存器定义 A shift register is a type of digital circuit using a cascade of flip flops where the output of one flip-flop is connected to the input of the next. 移位寄存器是一种将…

从零开始搭建博客网站-----源代码试部署

拿到了该项目的源码&#xff0c;先尝试是否可以成功部署&#xff0c;详细的部署视频地址 后端项目部署 先把maven配置好&#xff0c;都改成自己下载的maven地址 文件编码改成utf-8&#xff0c;防止配置文件乱码 如果maven是刚下的&#xff0c;要改一下下载包的地址&#xff0…

NoSQL基础知识小结

NoSQL 基础知识 什么是 NoSQL? NoSQL&#xff08;Not Only SQL 的缩写&#xff09;泛指非关系型的数据库&#xff0c;主要针对的是键值、文档以及图形类型数据存储。 NoSQL 数据库天生支持分布式&#xff0c;数据冗余和数据分片等特性&#xff0c;旨在提供可扩展的高可用高…

MidJourney笔记(3)-Prompts

MidJourney的Prompts介绍 MidJourney的Prompts是MidJourney的核心之一,这也是我们后续使用MidJourney过程中最重要的工作内容,根据生成的图片,不断的优化我们的Prompts内容。 那Prompts的中文意思是提示的意思。 Prompts的提示语有很多,最基础的用法就是: /imagine prompt…

基于python+TensorFlow+Django算法模型的车辆车型识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术栈主要模块1. 数据预处理2. 模型构建3. 模型训练4. 模型集成5. 用户界面 系统工作流程未来改进计划 二、功能三、系统四. 总结 一项目简介 # 车辆车…
最新文章