kotlin基础之lambda编程

在Kotlin中,Lambda表达式是一种非常强大的工具,允许我们以更简洁、更声明式的方式编写代码。Kotlin对集合的操作提供了丰富的函数式API,这使得处理集合数据变得更加直观和高效。以下是如何在Kotlin中使用Lambda表达式、集合的创建与遍历以及集合的函数式API的示例。

1. 集合的创建与遍历

集合的创建

在Kotlin中,你可以使用listOf()setOf()mapOf()等函数来快速创建列表、集合和映射。

// 创建列表
val list = listOf(1, 2, 3, 4, 5)
// 创建集合
val set = setOf(1, 2, 3, 4, 5) // 注意集合中的元素是唯一的
// 创建映射(Map)
val map = mapOf("key1" to "value1", "key2" to "value2")
集合的遍历

你可以使用forEach函数来遍历集合中的元素。

// 遍历列表
list.forEach { element ->
println(element)
}
// 简化Lambda表达式(如果Lambda只有一个参数并且它是最后一个参数,可以省略大括号和箭头)
list.forEach { println(it) } // 在这里,'it'是默认的参数名

2. 集合的函数式API

Kotlin为集合提供了许多函数式API,如filter()map()reduce()flatMap()等。

filter

filter函数接受一个Lambda表达式作为参数,并返回一个新集合,其中只包含满足Lambda表达式条件的元素。

val evenNumbers = list.filter { it % 2 == 0 } // 过滤出偶数
evenNumbers.forEach { println(it) }
map

map函数接受一个Lambda表达式作为参数,并返回一个新集合,其中包含应用Lambda表达式到原始集合每个元素的结果。

val squares = list.map { it * it } // 计算每个元素的平方
squares.forEach { println(it) }
reduce

reduce函数接受一个Lambda表达式(二元操作符)作为参数,并返回一个值,该值是通过对集合中的元素连续应用此Lambda表达式而计算得出的。

val sum = list.reduce { acc, element -> acc + element } // 计算列表的总和
println(sum)
// 或者使用内置操作符(如果Lambda表达式很简单)
val sumSimplified = list.reduce { acc, e -> acc + e }
println(sumSimplified)
// 更简洁的写法,使用sumBy函数
val sumBy = list.sumBy { it }
println(sumBy)

3. Java函数式API的使用

虽然Kotlin有自己的函数式API,但它也可以与Java的函数式接口(如PredicateFunctionConsumer等)和Stream API一起使用。但是,由于Kotlin的Lambda语法更加简洁和直观,因此通常建议使用Kotlin的函数式API。

然而,如果你需要与Java代码互操作或使用Java库,你可以这样做:

// 使用Java的Stream API和Lambda表达式
import java.util.stream.Collectors
import java.util.Arrays
val javaList = Arrays.asList(1, 2, 3, 4, 5)
val evenJavaList = javaList.stream()
.filter { it % 2 == 0 } // 这里我们仍然使用Kotlin的Lambda语法
.collect(Collectors.toList()) // 收集结果到新的列表中
evenJavaList.forEach { println(it) }

在这个例子中,我们使用了Java的Arrays.asList()来创建一个Java列表,并使用Java的Stream API来过滤偶数。但是,请注意,在Lambda表达式中,我们仍然使用了Kotlin的语法。这是因为Kotlin的Lambda表达式与Java的Lambda表达式在语法上非常相似,可以互换使用。

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

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

相关文章

202473读书笔记|《但愿呼我的名为旅人:松尾芭蕉俳句300》——围炉夜话,身顿心安,愿每个人都能在爱里自由驰骋

202473读书笔记|《但愿呼我的名为旅人:松尾芭蕉俳句300》——围炉夜话,身顿心安,愿每个人都能在爱里自由驰骋 😍😍🤩🤩 译者序正文二正文三正文四正文五正文六正文七 《但愿呼我的名为旅人&…

网站笔记:huggingface——can you run it?

Can You Run It? LLM version - a Hugging Face Space by Vokturz 1 配置设置部分 Model Name就是需要测量的模型名称 GPU Vendor ——GPU供应商 Filter by RAM (按RAM过滤) 筛选出所有内存容量在选择范围之间的GPU GPU 下拉菜单选择具体的GPU型号 LoRa % trainable param…

MT3608B是一个恒定频率,6引脚SOT23电流模式升压转换器用于小型,低功耗应用的目的芯片IC

一般说明 该MT3608B是一个恒定频率,6引脚SOT23电流模式升压转换器用于小型,低功耗应用的目的。该MT3608B开关在1.2MHz,并允许使用微小,低成本的电容器和电感2毫米或更少的高度。内部软启动的结果在小浪涌电流和延长电池寿…

Linux网络——端口号理解与UDP协议

前言 在之前,我们学习了UDP通信与套接字编程,了解到需要使用端口号来表示网络中的数据需要传输到哪个进程,同时使用套接字的进行了UDP的通信。但当时在应用层,我们仅仅是浮于表面进行了初步的使用,今天我们来深入的理…

面试八股之MySQL篇1——慢查询定位篇

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…

卷积神经网络(CNN)详细介绍及其原理详解

卷积神经网络(Convolutional Neural Networks,简称CNN)是深度学习中非常重要的一类神经网络,主要用于图像识别、图像分类、物体检测等计算机视觉任务。本文将详细介绍卷积神经网络的基本概念、结构组成及其工作原理,并…

IIS网站搭建

1、添加网站 2、命名加上端口方便查看端口占用情况(可有可无) 3、导入sql文件,数据库打开——新建数据库——建好的数据库右键运行sql文件——打开路径网站下面的install文件下的sql——选中之后点开始——左侧页面的右键刷新就会显示。

2024最新 Jenkins + Docker 实战教程(四) - 编写自己的Springboot项目实现自动化部署

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

前端基础:1-2 面向对象 + Promise

面向对象 对象是什么?为什么要面向对象? 通过代码抽象,进而藐视某个种类物体的方式 特点:逻辑上迁移更加灵活、代码复用性更高、高度的模块化 对象的理解 对象是对于单个物体的简单抽象对象是容器,封装了属性 &am…

IP学习——ospf1

OSPF:开放式最短路径优先协议 无类别IGP协议:链路状态型。基于 LSA收敛,故更新量较大,为在中大型网络正常工作,需要进行结构化的部署---区域划分、ip地址规划 支持等开销负载均衡 组播更新 ---224.0.0.5 224.0.0.6 …

小程序properties默认值定义及父子组件的传值

因经常写vue,很久没写小程序,容易串频道,现记录一下小程序的组件用法、监听传入值及父子传值方式 首先小程序中传值是没有:(冒号)的,其次properties中定义默认值不需要写default 1.自定义组件中,首先json…

存储+调优:存储-IP-SAN

存储调优:存储-IP-SAN 数据一致性问题 硬盘(本地,远程同步rsync) 存储设备(网络) 网络存储 不同接口的磁盘 1.速率 2.支持连接更多设备 3.支持热拔插 存储设备什么互联 千…

iOS 17.5 release notes

文章目录 iOS 17.5 更新恢复了多年前删除的一些图片新增彩虹壁纸欧盟用户可直接从网站下载应用新增了追踪通知改进 Apple News图书应用"阅读目标"设计更新颜色匹配的播客小部件Web浏览器安全权限的访问下一代“Beats Pill”扬声器在iOS 17.5代码中得到确认店内Vision…

学硕都考11408的211院校!河北工业大学计算机考研考情分析!

河北工业大学(Hebei University of Technology),简称河北工大,坐落于天津市,由河北省人民政府、天津市人民政府与中华人民共和国教育部共建, 隶属于河北省,是国家“双一流”建设高校、国家“211…

企业微信主体机构如何修改?

企业微信变更主体有什么作用? 做过企业运营的小伙伴都知道,很多时候经常会遇到现有的企业需要注销,切换成新的企业进行经营的情况,但是原来企业申请的企业微信上面却积累了很多客户,肯定不能直接丢弃,所以这…

OpenAI宫斗剧番外篇: “Ilya与Altman联手对抗微软大帝,扫除黑恶势力”,“余华”和“莫言”犀利点评

事情是这样的。 小编我是一个重度的智谱清言用户,最近智谱清言悄悄上线了一个“划词引用”功能后,我仿佛打开了新世界的大门。我甚至用这个小功能,玩出来了即将为你上映的《OpenAI宫斗剧番外篇》。 3.5研究测试:hujiaoai.cn 4研…

Stable Diffusion vs Midjunery的区别和选择

现在网上最多的关于AI绘画的工具莫过于stable diffusion(sd)和midjunery(mj)了,最近尝试了一番,稍作总结吧算是。我们对于工具的使用通常考虑的无非就是好不好用,效果如何,当然还有费…

学习_C语言下使用ringbuffer实现任意数据类型的FIFO

思考及注意看:调试中的任意。 https://www.cnblogs.com/dreamboy2000/p/12982423.html

Mac虚拟机工具 CrossOver 24.0.0 Beta3 Mac中文版

CrossOver是一款在Mac上运行Windows应用程序的软件,无需安装虚拟机或重启计算机,简化了操作过程,提高了工作效率,为用户带来便捷体验。前往Mac青桔下载,享受前所未有的便利和高效。摘要由作者通过智能技术生成 CrossOv…

vulnhub靶场之FunBox-7

一.环境搭建 1.靶场描述 Boot2root in 6 steps for script-kiddies.Timeframe to root this box: 20 mins to never ever. Its on you.HINTS: Enum without sense, costs you too many time:Use "Daisys best friend" for information gathering. Visit "Karl…