Android学习(七)-Kotlin编程语言-Lambda 编程
Lambda 编程
而 Kotlin 从第一个版本开始就支持了 Lambda 编程,并且 Kotlin 中的 Lambda 功能极为强大。Lambda 表达式使得代码更加简洁和易读。
2.6.1 集合的创建与遍历
集合的函数式 API 是入门 Lambda 编程的绝佳示例,但在开始之前,我们需要先学习如何创建集合。
创建集合
传统意义上的集合主要包括 List 和 Set,以及键值对数据结构 Map。List 和 Set 在 Java 中是接口,常见的实现类有 ArrayList、LinkedList、HashSet 等;Map 的常见实现类是 HashMap。
使用 Java 创建集合
假设我们要创建一个包含许多学生姓名和年龄的集合。在 Java 中,通常会这样做:
import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList<Student> students = new ArrayList<>();students.add(new Student("Alice", 20));students.add(new Student("Bob", 21));students.add(new Student("Charlie", 19));for (Student student : students) {System.out.println(student.getName() + " is " + student.getAge() + " years old.");}}
}class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}
这种初始化集合的方式比较繁琐。
使用 Kotlin 创建集合
Kotlin 提供了内置的 listOf() 函数来简化集合的初始化:
data class Student(val name: String, val age: Int)fun main() { val students = listOf(Student("Alice", 20), Student("Bob", 21), Student("Charlie", 19))
}
只需一行代码即可完成集合的初始化操作。
遍历集合
Kotlin 中可以使用 for-in 循环来遍历集合。以下是一个示例:
data class Student(val name: String, val age: Int)fun main() { val students = listOf(Student("Alice", 20), Student("Bob", 21), Student("Charlie", 19))for (student in students) { println("${student.name} is ${student.age} years old.")}
}
运行上述代码,输出结果如下:
Alice is 20 years old.
Bob is 21 years old.
Charlie is 19 years old.
不可变与可变集合
listOf() 函数创建的是一个不可变集合,这意味着不能对其进行添加、修改或删除操作。如果需要创建一个可变集合,可以使用 mutableListOf() 函数:
data class Student(val name: String, val age: Int)fun main() { val students = mutableListOf(Student("Alice", 20), Student("Bob", 21), Student("Charlie", 19))students.add(Student("David", 22)) for (student in students) { println("${student.name} is ${student.age} years old.")}
}
运行上述代码,输出结果如下:
Alice is 20 years old.
Bob is 21 years old.
Charlie is 19 years old.
David is 22 years old.
Set 集合
Set 集合的用法与 List 类似,只是将创建集合的方式换成了 setOf() 和 mutableSetOf() 函数:
data class Student(val name: String, val age: Int)fun main() { val uniqueStudents = setOf(Student("Alice", 20), Student("Bob", 21), Student("Charlie", 19)) for (student in uniqueStudents) { println("${student.name} is ${student.age} years old.")}
}
需要注意,Set 集合中不允许存放重复元素。
Map 集合
Map 是一种键值对形式的数据结构。传统的 Map 用法是先创建一个 HashMap 实例,然后将一个个键值对添加到 Map 中:
import java.util.HashMap;public class Main {public static void main(String[] args) {HashMap<String, Integer> studentAges = new HashMap<>();studentAges.put("Alice", 20);studentAges.put("Bob", 21);studentAges.put("Charlie", 19);for (String name : studentAges.keySet()) {System.out.println("Name is " + name + ", Age is " + studentAges.get(name));}}
}
在 Kotlin 中,建议使用类似于数组下标的语法来操作 Map:
fun main() { val studentAges = HashMap<String, Int>()studentAges["Alice"] = 20studentAges["Bob"] = 21studentAges["Charlie"] = 19
}
更简洁的做法是使用 mapOf() 和 mutableMapOf() 函数来创建 Map:
fun main() { val studentAges = mapOf("Alice" to 20, "Bob" to 21, "Charlie" to 19)
}
这里的 to 是一个 infix 函数,用于关联键值对。
遍历 Map 集合
遍历 Map 集合时仍然可以使用 for-in 循环:
fun main() { val studentAges = mapOf("Alice" to 20, "Bob" to 21, "Charlie" to 19)for ((name, age) in studentAges) { println("Name is $name, Age is $age") }
}
运行上述代码,输出结果如下:
Name is Alice, Age is 20
Name is Bob, Age is 21
Name is Charlie, Age is 19
总结
通过本节的学习,我们掌握了 Kotlin 中集合的创建与遍历方法。Kotlin 提供了简洁的语法来初始化和操作集合,使得代码更加清晰和易于维护。接下来,我们将学习集合的函数式 API,从而正式入门 Lambda 编程。
相关文章:
Android学习(七)-Kotlin编程语言-Lambda 编程
Lambda 编程 而 Kotlin 从第一个版本开始就支持了 Lambda 编程,并且 Kotlin 中的 Lambda 功能极为强大。Lambda 表达式使得代码更加简洁和易读。 2.6.1 集合的创建与遍历 集合的函数式 API 是入门 Lambda 编程的绝佳示例,但在开始之前,我们…...
彻底认识和理解探索分布式网络编程中的SSL安全通信机制
探索分布式网络编程中的SSL安全通信机制 SSL的前提介绍SSL/TLS协议概述SSL和TLS建立在TCP/IP协议的基础上分析一个日常购物的安全问题 基于SSL的加密通信SSL的安全证书SSL的证书的实现安全认证获取对应的SSL证书方式权威机构获得证书创建自我签名证书 SSL握手通信机制公私钥传输…...
【libuv】Fargo信令2:【深入】client为什么收不到服务端响应的ack消息
客户端处理server的ack回复,判断链接连接建立 【Fargo】28:字节序列【libuv】Fargo信令1:client发connect消息给到server客户端启动后理解监听read消息 但是,这个代码似乎没有触发ack消息的接收: // 客户端初始化 void start_client(uv_loop_t...
Vue3自定义事件
自定义事件是一种组件间通信的方式,它允许子组件向父组件发送信息。子组件可以通过自定义事件向父组件传递数据以及事件,当自定义事件触发时,子组件可以借此将子组件的数据传递给父组件并使父组件对此做出相应的操作。 1.声明自定义事件 使…...
BeautifulSoup 与 XPath 用法详解与对比
BeautifulSoup(bs4) 和 XPath 是学习python爬虫过程中常常用到的库,本文将详细介绍它们的功能、使用方法、优缺点以及实际应用中的区别和选择建议。 1. BeautifulSoup 用法详解 1.1 什么是 BeautifulSoup? BeautifulSoup 是 Pyt…...
Emacs 折腾日记(五)——elisp 数字类型
本文是参考 emacs lisp 简明教程 写的,很多东西都是照搬里面的内容,如果各位读者觉得本文没有这篇教程优秀或者有抄袭嫌疑、又或者觉得我更新比较慢、再或者其他什么原因,请直接阅读上述链接中的教程。 上一篇我们讲了elisp中的流程控制结构相…...
重拾设计模式--外观模式
文章目录 外观模式(Facade Pattern)概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式(Facade Pattern)概述 定义 外观模式是一种结构型设计模式,它为子系统中的一组接口提供了一个统一…...
源码编译llama.cpp for android
源码编译llama.cpp for android 我这有已经编译好的版本,直接下载使用: https://github.com/turingevo/llama.cpp-build/releases/tag/b4331 准备 android-ndk 已下载: /media/wmx/ws1/software/qtAndroid/Sdk/ndk/23.1.7779620版本 &am…...
StarRocks 排查单副本表
文章目录 StarRocks 排查单副本表方式1 查询元数据,检查分区级的副本数方式2 SHOW PARTITIONS命令查看 ReplicationNum修改副本数命令 StarRocks 排查单副本表 方式1 查询元数据,检查分区级的副本数 # 方式一 查询元数据,检查分区级的副本数…...
Windows11 家庭版安装配置 Docker
1. 安装WSL WSL 是什么: WSL 是一个在 Windows 上运行 Linux 环境的轻量级工具,它可以让用户在 Windows 系统中运行 Linux 工具和应用程序。Docker 为什么需要 WSL: Docker 依赖 Linux 内核功能,WSL 2 提供了一个高性能、轻量级的…...
线程知识总结(二)
本篇文章以线程同步的相关内容为主。线程的同步机制主要用来解决线程安全问题,主要方式有同步代码块、同步方法等。首先来了解何为线程安全问题。 1、线程安全问题 卖票示例,4 个窗口卖 100 张票: class Ticket implements Runnable {priv…...
解决vscode ssh远程连接服务器一直卡在下载 vscode server问题
目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…...
【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)
一、理论讲解 1. 电感设计的两个角度 电感的设计可以从两个角度考虑,一个是外部特性,一个是内部特性。外部特性就是把电感视为一个黑盒子,带有两个端子,如果带有抽头的电感就有三个端子,需要去考虑其电感值、Q值和自…...
Definition of Done
Definition of Done English Version The team agrees on, a checklist of criteria which must be met before a product increment “often a user story” is considered “done”. Failure to meet these criteria at the end of a sprint normally implies that the work …...
【漏洞复现】CVE-2023-37461 Arbitrary File Writing
漏洞信息 NVD - cve-2023-37461 Metersphere is an opensource testing framework. Files uploaded to Metersphere may define a belongType value with a relative path like ../../../../ which may cause metersphere to attempt to overwrite an existing file in the d…...
简单工厂模式和策略模式的异同
文章目录 简单工厂模式和策略模式的异同相同点:不同点:目的:结构: C 代码示例简单工厂模式示例(以创建图形对象为例)策略模式示例(以计算价格折扣策略为例)UML区别 简单工厂模式和策…...
HuggingFace datasets - 下载数据
文章目录 下载数据修改默认保存地址 TRANSFORMERS_CACHE保存到本地 & 本地加载保存加载 读取 .arrow 数据 下载数据 1、Python 代码下载 from datasets import load_dataset imdb load_dataset("imdb") # name参数为full或mini,full表示下载全部数…...
梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语
雅各比矩阵与梯度:区别与联系 在数学与机器学习中,梯度(Gradient) 和 雅各比矩阵(Jacobian Matrix) 是两个核心概念。虽然它们都描述了函数的变化率,但应用场景和具体形式有所不同。本文将通过…...
Vscode搭建C语言多文件开发环境
一、文章内容简介 本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件,以及vscode必备插件,最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多,建议大家在阅读时使用电脑阅读,按照目录…...
自定义 C++ 编译器的调用与管理
在 C 项目中,常常需要自动化地管理编译流程,例如使用 MinGW 或 Visual Studio 编译器进行代码的编译和链接。为了方便管理不同编译器和简化编译流程,我们开发了一个 CompilerManager 类,用于抽象编译器的查找、命令生成以及执行。…...
突破B站缓存限制:m4s-converter让视频资源自由流动
突破B站缓存限制:m4s-converter让视频资源自由流动 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在数字内容爆炸的时代,…...
到底要不要用AI写代码?别争了
其实我一直觉得,现在大家讨论 AI 写代码这件事,有点熟悉。因为以前我们也是这么过来的。刚开始写代码那会儿, 不会就打开 百度, 一行一行找答案,复制、试错、再改。一个分号错了能找半天, 中英文标点混了直…...
openclaw 配置教程:本地安装、网关接入与模型 API 配置完整说明
如果你在折腾 openclaw 配置,通常会发现真正影响使用体验的,不是把程序装上去,而是后面的模型来源怎么接、网关怎么起、控制面板怎么进,以及默认模型如何切换。只要这些环节没有理顺,就算安装完成,后续也很…...
告别空谈!用Langchain4j的Function Calling,为你的Java AI助手加上“查询订单”的实战能力
实战Langchain4j函数调用:为Java AI助手赋予订单查询能力 想象一下,当你的医疗预约AI助手不仅能回答"如何预防感冒",还能在你说"查看我下周的挂号记录"时,直接调取数据库返回具体预约信息——这种"能说…...
旧手机秒变电脑摄像头:DroidCam创新应用指南
旧手机秒变电脑摄像头:DroidCam创新应用指南 【免费下载链接】droidcam GNU/Linux/nix client for DroidCam 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam 在远程办公与在线协作日益普及的今天,高质量摄像头成为必备工具。然而专用摄像…...
终极指南:Android AdvancedRecyclerView 低版本兼容处理与 API 14+适配方案
终极指南:Android AdvancedRecyclerView 低版本兼容处理与 API 14适配方案 【免费下载链接】android-advancedrecyclerview RecyclerView extension library which provides advanced features. (ex. Googles Inbox app like swiping, Play Music app like drag and…...
COMSOL 6.1版本皮秒多脉冲激光烧蚀模型:双温变形几何烧蚀模拟系统——电子晶格温度清晰解...
COMSOL 6.1版本 皮秒多脉冲激光烧蚀模型 模型内容:涉及双温模型,变形几何,烧蚀,皮秒脉冲热源,电子、晶格温度 优势:模型注释清晰明了,各个情况都有涉及可参考性极强,可以修改&#x…...
人事档案整理系统开发记录
档案整理系统开发记录 本篇文章,用于记录我个人开发档案整理工具的所有问题。 说明:开发该工具适用于人事档案处理工具,适用于档案处理,帮助档案整理人员更轻松的移交。 我会一步一步记录,整个软件开的所有的问题&…...
OpenClaw+千问3.5-9B爬虫方案:智能解析与数据入库
OpenClaw千问3.5-9B爬虫方案:智能解析与数据入库 1. 为什么需要智能爬虫 去年我接手了一个市场调研项目,需要从30多个电商平台抓取商品信息和用户评价。传统爬虫开发让我吃尽苦头——每个网站都要单独写解析规则,反爬机制层出不穷ÿ…...
OpenClaw新手入门:千问3.5-9B镜像一键部署与初体验
OpenClaw新手入门:千问3.5-9B镜像一键部署与初体验 1. 为什么选择这个组合? 去年冬天,我第一次在本地尝试用OpenClaw自动整理电脑上的照片。当时对接的是GPT-3.5,每次识别图片内容都要消耗大量token,一个月下来账单让…...
