Android学习(七)-Kotlin编程语言-Lambda 编程

Lambda 编程

而 Kotlin 从第一个版本开始就支持了 Lambda 编程,并且 Kotlin 中的 Lambda 功能极为强大。Lambda 表达式使得代码更加简洁和易读。

2.6.1 集合的创建与遍历

集合的函数式 API 是入门 Lambda 编程的绝佳示例,但在开始之前,我们需要先学习如何创建集合。

创建集合

传统意义上的集合主要包括 List 和 Set,以及键值对数据结构 Map。List 和 Set 在 Java 中是接口,常见的实现类有 ArrayListLinkedListHashSet 等;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 编程。



 

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

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

相关文章

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果&#xff08;网页显示&#…

2023年下半年软考信息安全工程师案例分析及答案解析

试题一(16分) 回答问题1至问题6,将解答填入答题纸对应的解答栏内。 问题1(4分) 已知DES算法S盒如下,请补全S盒空缺的数据(1)、(2)、(3)、(4)。 【参考答案】3、13、15、0 问题2(2分) 已知S盒的输入为110011,请计算经过S盒变换之后的二进制输出。 【参考…

Docker部署ant-design-pro V6.0.0

本文将指导您如何使用Docker部署ant-design-pro 6.0.0。ant-design-pro是一个基于Ant Design的企业级中后台前端/设计解决方案&#xff0c;使用Docker可以简化其部署过程&#xff0c;确保环境的一致性和可移植性。 环境准备 在开始之前&#xff0c;请确保您已经安装了以下软件…

工业摄像机基于电荷耦合器件的相机

工业摄像机系列产品及其识别技术的详细介绍&#xff1a; 一、工业摄像机概述 工业摄像机是利用光学成像技术获取视觉信息&#xff0c;并通过图像处理算法分析这些信息的设备。它通常具有高图像稳定性、高传输能力和高抗干扰能力等特性&#xff0c;适用于各种复杂的工业环境。 …

模型部署学习笔记——模型部署关键知识点总结

模型部署学习笔记——模型部署关键知识点总结 模型部署学习笔记——模型部署关键知识点总结1. CUDA中Grid和Block的定义是什么&#xff1f;Shared Memory的定义&#xff1f;Bank Conflict的定义&#xff1f;Stream和Event的定义&#xff1f;2. TensorRT的工作流程&#xff1f;3…

青少年编程与数学 02-004 Go语言Web编程 13课题、模板引擎

青少年编程与数学 02-004 Go语言Web编程 13课题、模板引擎 一、模板引擎模板引擎的主要特点包括&#xff1a;模板引擎的应用场景&#xff1a;Go语言中的模板引擎&#xff1a;示例&#xff1a;使用Go的html/template包 二、工作流程1. 创建模板文件2. 准备数据3. 加载模板4. 渲染…

Spring Cloud Gateway 源码

Spring Cloud Gateway 架构图 按照以上架构图&#xff0c;请求的处理流程&#xff1a; 1.客户端请求发送到网关 DispatcherHandler 2.网关通过 HandlerMapping 找到相应的 WebHandler 3.WebHandler生成FilterChain过滤器链执行所有的过滤器 4.返回Response结果 自动装配类Gat…

随记:springboot的xml中sql数据库表名动态写法

随记&#xff1a;springboot的xml中数据库表名动态写法 随记&#xff1a;springboot的xml中数据库表名动态写法<![CDATA[ ${gridLayerName} ]]>&#xff0c;直接使用#{是不可以的} <select id"getYbLabelNum" resultType"java.lang.Integer">…

基于Spring Boot的店铺租赁平台的设计与实现

一、项目背景 随着互联网技术的飞速发展&#xff0c;线上交易已成为商业活动的重要趋势。店铺租赁作为商业地产的核心环节&#xff0c;其传统模式面临着信息不对称、交易效率低下等问题。因此&#xff0c;开发一个高效、便捷的线上店铺租赁平台显得尤为重要。本项目利用Java S…

Debian 10上使用UFW设置防火墙

介绍 UFW或Uncomplicated Firewall是iptables一个接口&#xff0c;旨在简化配置防火墙的过程。 虽然iptables是一个可靠而灵活的工具&#xff0c;但初学者很难学会如何使用它来正确配置防火墙。 如果您希望开始保护网络并且不确定使用哪种工具&#xff0c;UFW可能是您的正确选…

基于卷积神经网络(CNN)和ResNet50的水果与蔬菜图像分类系统

前言 在现代智能生活中&#xff0c;计算机视觉技术已经成为不可或缺的工具&#xff0c;特别是在食物识别领域。想象一下&#xff0c;您只需拍摄一张水果或蔬菜的照片&#xff0c;系统就能自动识别其种类并为您提供丰富的食谱建议。这项技术不仅在日常生活中极具实用性&#xf…

前端数据加载慢的解决方法

都是和前端性能优化非常类似的做法。 1. 懒加载 (Lazy Loading) 对于图片、视频等资源&#xff0c;或者某些组件&#xff0c;在用户滚动到相关区域时再加载&#xff0c;而不是页面一开始就加载所有内容。使用 IntersectionObserver 实现懒加载&#xff0c;或者一些 UI 框架&am…

Tomcat部署war包项目解决404问题

问题出在了Tomcat的版本上了&#xff0c;应该先去看这个项目使用的springboot版本&#xff0c;然后去仓库里找到对应Tomcat版本。 Maven Repository: org.springframework.boot spring-boot-starter-tomcat 因此我们应该选择Tomcat9版本。 当我把Tomcat11换成Tomcat9时&…

Redis篇--常见问题篇1--缓存穿透(缓存空值,布隆过滤器,接口限流)

1、概述 缓存穿透是指客户端请求的数据既不在Redis缓存中&#xff0c;也不在数据库中。换句话说&#xff0c;缓存和数据库中都不存在该数据&#xff0c;但客户端仍然发起了查询请求。这种情况下&#xff0c;缓存无法命中&#xff0c;请求会直接穿透到数据库&#xff0c;而数据…

前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化

这一章主要分享一下使用 Konva 遇到的性能优化问题&#xff0c;并且介绍一下 UI 美化的思路。 至少有 2 位小伙伴积极反馈&#xff0c;发现本示例有明显的性能问题&#xff0c;一是内存溢出问题&#xff0c;二是卡顿的问题&#xff0c;在这里感谢大家的提醒。 请大家动动小手&a…

BlueLM:以2.6万亿token铸就7B参数超大规模语言模型

一、介绍 BlueLM 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型&#xff0c;本次发布包含 7B 基础 (base) 模型和 7B 对话 (chat) 模型&#xff0c;同时我们开源了支持 32K 的长文本基础 (base) 模型和对话 (chat) 模型。 更大量的优质数据 &#xff1a;高质量语料…

C语言基础16(文件IO)

文章目录 构造类型枚举类型typedef 文件操作(文件IO)概述文件的操作文件的打开与关闭打开文件关闭文件文件打开与关闭案例 文件的顺序读写单字符读取多字符读取单字符写入多字符写入 综合案例&#xff1a;文件拷贝判别文件结束 数据块的读写(二进制)数据块的读取数据块的写入 文…

【Unity/HFSM】使用UnityHFSM实现输入缓冲(预输入)和打断机制

文章目录 前言预输入Animancer的InputBuffer&#xff1a;在UnityHFSM中实现InputBuffer&#xff1a; 打断机制 前言 参考Animancer在状态机中的InputBuffer&#xff0c;在UnityHFSM中实现类似的InputBuffer机制&#xff0c;同时扩展一个状态打断机制 插件介绍&#xff1a; A…

运维日记

运维 内容分发网络(CDN):使用CDN将图片分发到离用户更近的服务器,减少传输时间sudo的权限配置是通过/etc/sudoers文件管理的,这个文件定义了哪些用户在哪种条件下执行什么命令。直接编辑这个文件是有风险的,因为错误的语法可能导致系统无法正常使用sudo功能,因此使用vi…

前端需要学什么

作为前端开发者&#xff0c;学习的内容不仅仅局限于 HTML、CSS 和 JavaScript。前端技术栈发展迅速&#xff0c;想要在职业生涯中不断进步&#xff0c;可以从以下几个方面规划学习路径&#xff1a; 1. 核心前端技能 掌握前端开发的基础和进阶知识&#xff1a; HTML/CSS/JavaS…