当前位置: 首页 > news >正文

kotlin--3.集合操作

目录

一.list集合

二.Set集合

 三.Map集合

迭代遍历Map集合:

  8.hashMap

四.Stream流

1.map

2.filter 

3.reduce 

4.forEach 

5.sorted 

6.distinct 

 7.综合案例


一.list集合

在Kotlin中,常见的List集合类型有以下几种:

  1. listOf:不可变的只读List,其元素不可更改。
  2. mutableListOf:可变的List,允许添加、删除和修改元素。
  3. arrayListOf:可变的List,底层实现使用数组,性能较好。

以下是创建List集合以及常见操作的示例:

  1. 创建List集合:
// 创建一个不可变的只读List
val list1 = listOf(1, 2, 3)
println(list1)  // 输出:[1, 2, 3]// 创建一个可变的List
val list2 = mutableListOf("apple", "banana", "orange")
println(list2)  // 输出:[apple, banana, orange]// 创建一个可变的ArrayList
val list3 = arrayListOf(1.2, 3.4, 5.6)
println(list3)  // 输出:[1.2, 3.4, 5.6]

   2.常见操作:

val numbers = listOf(1, 2, 3, 4, 5)// 访问元素
val firstNumber = numbers[0]
println(firstNumber)  // 输出:1// 添加元素
val newList = numbers.toMutableList()
newList.add(6)
println(newList)  // 输出:[1, 2, 3, 4, 5, 6]// 删除元素
newList.removeAt(2)
println(newList)  // 输出:[1, 2, 4, 5, 6]// 修改元素
newList[1] = 10
println(newList)  // 输出:[1, 10, 4, 5, 6]// 迭代元素
for (number in numbers) {println(number)
}// 过滤元素
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers)  // 输出:[2, 4]

3.泛型约束

例如,在创建一个只包含整数的List时,可以指定List的泛型类型为Int:

val numbers: List<Int> = listOf(1, 2, 3)val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3)

二.Set集合

Kotlin中的Set集合是一种不允许重复元素的集合。由于Set集合中的元素是无序的,因此不能通过索引获取元素。

1.创建Set集合:

val set: Set<Int> = setOf(1, 2, 3)val mutableSet: MutableSet<Int> = mutableSetOf(1, 2, 3)

2.Set集合的常见操作:

  • 添加元素:使用add方法添加元素到Set集合中。
    mutableSet.add(4)
  • 删除元素:使用remove方法从Set集合中删除指定元素。
    mutableSet.remove(3)
  • 判断元素是否存在:使用contains方法判断Set集合中是否包含指定元素。
    val containsElement = mutableSet.contains(2)
  • 获取Set集合的大小:使用size属性获取Set集合的大小。
    val size = mutableSet.size
  • 迭代遍历Set集合:
    for (element in mutableSet) {println(element)
    }
    ---------------------
    mutableSet.forEach { element ->println(element)
    }

 三.Map集合

在Kotlin中,Map集合用于存储键值对,其中键和值可以是任意类型。以下是创建Map集合和进行常见操作的示例:

  1. 创建Map集合:

    • 使用mapOf函数创建不可变的Map集合:
      val map: Map<String, Int> = mapOf("A" to 1, "B" to 2, "C" to 3)
    • 使用mutableMapOf函数创建可变的Map集合:
      val mutableMap: MutableMap<String, Int> = mutableMapOf("A" to 1, "B" to 2, "C" to 3)
  2. Map集合的常见操作:

    • 添加或更新元素:使用put方法添加或更新键值对。
      mutableMap.put("D", 4)
      mutableMap["E"] = 5
    • 删除元素:使用remove方法从Map集合中删除指定键值对。
      mutableMap.remove("C")
    • 判断键是否存在:使用containsKey方法判断Map集合中是否包含指定键。
      val containsKey = mutableMap.containsKey("A")
    • 判断值是否存在:使用containsValue方法判断Map集合中是否包含指定值。
      val containsValue = mutableMap.containsValue(2)
    • 获取Map集合的大小:使用size属性获取Map集合的大小。
      val size = mutableMap.size
    • 获取键或值的集合:使用keys和values属性分别获取Map集合中的键和值的集合。
      val keys = mutableMap.keys
      val values = mutableMap.values
    • 迭代遍历Map集合:

      for ((key, value) in mutableMap) {println("Key: $key, Value: $value")
      }
      ---------------------
      mutableMap.forEach { (key, value) ->println("Key: $key, Value: $value")
      }

  8.hashMap

fun main() {val hashMap = HashMap<String, Int>()// 添加键值对hashMap["Alice"] = 25hashMap["Bob"] = 30hashMap["Charlie"] = 35// 获取键对应的值val age = hashMap["Alice"]println(age) // 输出: 25// 遍历键值对for ((name, age) in hashMap) {println("$name: $age")}// 输出:// Alice: 25// Bob: 30// Charlie: 35// 检查键是否存在val containsKey = hashMap.containsKey("Alice")println(containsKey) // 输出: true// 删除指定键值对hashMap.remove("Bob")println(hashMap) // 输出: {Alice=25, Charlie=35}// 清空哈希表hashMap.clear()println(hashMap.isEmpty()) // 输出: true
}

四.Stream流

在Kotlin中,Stream流操作提供了一种功能强大的方式来处理集合数据。可以使用扩展函数和lambda表达式来对集合进行处理。以下是一些常见的Stream流操作方法及其示例:

1.map

  1. map对集合中的每个元素应用函数,并将结果收集到一个新的集合中。
val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers)   // 输出:[1, 4, 9, 16, 25]

2.filter 

  1. filter:根据指定的条件筛选集合中的元素。
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers)   // 输出:[2, 4]

3.reduce 

  1. reduce:将集合中的元素进行累积操作,返回一个结果。
val numbers = listOf(1, 2, 3, 4, 5)
val sum = numbers.reduce { acc, num -> acc + num }
println(sum)   // 输出:15

4.forEach 

  1. forEach:对集合中的每个元素应用指定的操作。
val numbers = listOf(1, 2, 3, 4, 5)
numbers.forEach { println(it) }

5.sorted 

  1. sorted:对集合中的元素进行排序。
val numbers = listOf(4, 2, 5, 1, 3)
val sortedNumbers = numbers.sorted()
println(sortedNumbers)   // 输出:[1, 2, 3, 4, 5]

6.distinct 

  1. distinct去除集合中的重复元素。
val numbers = listOf(1, 2, 2, 3, 3, 3, 4, 4, 5)
val distinctNumbers = numbers.distinct()
println(distinctNumbers)   // 输出:[1, 2, 3, 4, 5]

 7.综合案例

data class Person(val name: String, val age: Int)fun main() {val people = listOf(Person("Alice", 25),Person("Bob", 30),Person("Charlie", 35),Person("David", 40),Person("Emma", 45))val filteredPeople = people.filter { it.age > 30 }.sortedByDescending { it.age }.map { "${it.name} (${it.age})" }println(filteredPeople)
}

在上述案例中,我们有一个包含Person对象的人员列表。我们首先使用filter函数筛选出年龄大于30岁的人员,然后使用sortedByDescending函数按年龄降序排序,最后使用map函数将Person对象转换为格式化的字符串。最终,我们将过滤和格式化后的结果打印出来。

输出结果将是:

[Emma (45), David (40), Charlie (35)]

相关文章:

kotlin--3.集合操作

目录 一.list集合 二.Set集合 三.Map集合 迭代遍历Map集合&#xff1a; 8.hashMap 四.Stream流 1.map 2.filter 3.reduce 4.forEach 5.sorted 6.distinct 7.综合案例 一.list集合 在Kotlin中&#xff0c;常见的List集合类型有以下几种&#xff1a; listOf&…...

自动驾驶-BEV感知综述

BEV感知综述 随着自动驾驶传感器配置多模态化、多源化&#xff0c;将多源信息在unified View下表达变得更加关键。BEV视角下构建的local map对于多源信息融合及理解更加直观简洁&#xff0c;同时对于后续规划控制模块任务的开展也更为方便。BEV感知的核心问题是&#xff1a; …...

面试题-3

1.说一下原型链 原型就是一个普通对象,它是为构造函数实例共享属性和方法&#xff0c;所有实例中引用原型都是同一个对象 使用prototype可以把方法挂载在原型上&#xff0c;内存值保存一致 _proto_可以理解为指针,实例对象中的属性,指向了构造函数的原型(prototype) 2.new操…...

C++ Core Guidelines 中文版 GSL

C GSL&#xff08;Guideline Support Library&#xff09;是由 Microsoft 开发的一个开源库&#xff0c;旨在提供一组通用的 C 标准库扩展&#xff0c;以支持 C 标准委员会提出的指导原则。GSL 为 C 开发人员提供了许多有用的工具和类型&#xff0c;以帮助他们编写更安全、更高…...

同时显示上下两层凸包特征的可视化程序

数据类型 std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> hulls_k_upper std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> hulls_k_lower std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> hulls_underk_upper std::vector<…...

Django框架之模型层(二)

【十二】Django中如何开启事务 事务是MySQL数据库中得一个重要概念 事务的目的&#xff1a;为了保证多个SQL语句执行成功&#xff0c;执行失败&#xff0c;前后保持一致&#xff0c;保证数据安全 【1】ACID是数据库事务的四个关键特性 它代表了原子性(Atomicity)、…...

C++之list

C之list list的构造 #include <iostream> #include<list> using namespace std;//打印函数 void printfList(const list<int>&L) {for(list<int>::const_iterator it L.begin();it ! L.end();it){cout<<*it<<" ";}cout<…...

C语言日记——调试篇

一、调试调试的基本步骤 发现程序错误的存在 以隔离、消除等方式对错误进行定位 确定错误产生的原因 提出纠正错误的解决办法 对程序错误予以改正&#xff0c;重新测试 二、Debug和Release Debug通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…...

【python】Django——templates模板、静态文件、django模板语法、请求和响应

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——templates模板、静态文件、djang…...

Android设计模式--观察者模式

时间是一只藏在黑暗中温柔的手&#xff0c;在你一出神一恍惚之间&#xff0c;物走星移 一&#xff0c;定义 观察者模式是定义对象间一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解&am…...

【Linux】Ubuntu16.04下安装python高版本--源码安装

Ubuntu16.04下完美安装python高版本及对应版本的pip 方法一:直接用命令安装python3.6&#xff08;但我没安装成功&#xff09; 好像是因为Ubuntu16.04的软件仓库&#xff08;源&#xff09;中python的最高版本就是python3.5&#xff0c;所以无法直接用apt来安装 #方法一 sudo…...

变长子网划分问题的二叉树解法

计网的变长子网划分、计组的变长操作码划分、数据结构的哈夫曼编码&#xff0c;都是前缀编码的本质&#xff08;变长操作码的二叉树解法我还在琢磨中&#xff09; 【二叉树解法】每条从叶结点到根节点的路径上有且只有一个被分配的结点&#xff1a; 【例】现将一个IP网络划分成…...

编译安装redis及配置多实例

yum安装是这种十分简单的方法我们就不在提及了&#xff0c;今天我们来做一下redis的编译安装 Redis源码包官方下载链接&#xff1a;http://download.redis.io/releases/ 一、编译安装&#xff1a; 安装依赖包 dnf -y install make gcc jemalloc-devel systemd-devel如果是…...

网络(一)总纲

一 总纲 ① 背景 1、该资料不管是在华为内部还是外部都是很出名的2、该教程仅仅作为个人笔记,形成自己的网络知识体系,自己会按照教程手把手做实验,copy图谱备注&#xff1a; 自己没有处理过物理网和虚拟网,所以会以一个小白的角度去理解,可能存在偏差3、立足点&#xff1a…...

WPF中的App类介绍

在WPF (Windows Presentation Foundation) 应用程序中&#xff0c;App 类扮演着很重要的角色。这个类通常在每个WPF应用程序中都会有&#xff0c;并且生成在App.xaml文件和其代码后台App.xaml.cs中。App类通常继承自System.Windows.Application类&#xff0c;并且有以下的主要职…...

.nc格式文件的显示及特殊裁剪方式

最近我们遇到一个nc格式的文件&#xff0c;需要将它做成报告插图&#xff0c;bing搜索一番以后&#xff0c;了解到nc的全名为NetCDF(network Common Data Form)&#xff0c;是一种网络通用数据格式&#xff0c;广泛用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。…...

为什么需要线程池?C++如何实现一个线程池?

为什么需要线程池&#xff1f;C如何实现一个线程池&#xff1f; 为什么需要线程池&#xff1f;C如何实现一个线程池&#xff1f;...

多视图聚类的论文阅读

当聚类的方式使用的是某一类预定义好的相似性度量时&#xff0c; 会出现如下情况&#xff1a; 数据聚类方面取得了成功&#xff0c;但它们通常依赖于预定义的相似性度量&#xff0c;而这些度量受原始方法的影响:当输入维数相对较高时&#xff0c;往往是无效的。 1. Deep Mult…...

shell脚本适用场景

1.适用场景 Shell脚本是一种用于自动化和批量处理任务的脚本语言。它通常在Unix/Linux系统中使用&#xff0c;并且被广泛应用于各种场景&#xff0c;包括但不限于以下几个方面&#xff1a; 自动化任务&#xff1a;Shell脚本可以用于编写自动化脚本&#xff0c;完成一系列重复性…...

Bash openldap同步AD组织数据

将AD的ou同步到openldap&#xff08;可支持全量同步和增量同步&#xff09; 整体思路如下&#xff1a; 从ad导出所有的数据&#xff0c;然后进行参数替换以及处理&#xff0c;处理后的文件称为A&#xff1b;从openldap导出所有的数据&#xff0c;然后进行参数替换以及处理&am…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...