kotlin的函数标准库使用
摘要说明
函数标准库常用的有:
1、apply:
apply函数作为一个配置函数,可以传入一个接收者,然后调用一系列函数来配置它以方便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者
使用介绍:
// 使用apply实现val file1 = File("E://text_demo.txt").apply {setReadable(true)setWritable(true)setExecutable(false)}
2、let
能使某个变量作用于其lambda表达式里,让it关键字能引用。let和apply比较,let会把接收者传给lambda,而apply什么都不传,匿名执行完函数;apply会返回当前接收者,而let会返回lambda最后一行。
使用介绍:
/*** let使用*/val result = listOf<Int>(3, 2, 1).first().let {it * it}输出结果:9
-----------------------------------------------------------
fun formatGreeting(guestName: String?): String {return guestName?.let {"Welcome, $it"} ?: "what's your name?"
}formatGreeting(null)
输出结果:what's your name?----------------------------------------------------------
说明:安全调用允许在可空类型上调用函数
var str: String = "butterfly"str = str.let {if (it.isNotBlank()) {it.capitalize().plus("你好")} else {"butterfly"}}println(str)输出结果:Butterfly你好
3、run
1)光看作用域行为,run和apply差不多,但与apply不同,run函数不返回接收者,run返回的是lambda结果,也就是true或者false。2)执行函数引用
使用介绍:
/*** run函数的使用*/// 使用方式1val file2 = File("E://text_demo.txt")val result2 = file2.run {readText().contains("great")}println(result2)输出结果:true
---------------------------------------------------------------
// 使用方式2,调用函数val isLong = "The people's Republic of China".run(::isLong)fun isLong(name: String) {name.length >= 10
}println(isLong)输出结果:true
4、with
是run的变体,他们的功能行为是一样的,但with调用方式不同,调用with时,需要值参作为其第一个参数传入
使用介绍:
val resultWith = with("The people's Republic of China") {length >= 10}println(resultWith)输出结果:true
5、also
和let函数功能相似。和let一样also也是把接受者作为参数值传给lambda,但是有一点不同:also返回接收者对象,而let返回lambda结果,因为这个差异,also尤其适合针对同一原始对象,处理事务,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用。
使用介绍:
/*** also函数使用*/var fileContents: List<String>File("E://text_demo.txt").also {println(it.name)}.also {fileContents = it.readLines()}println(fileContents)
---------------------------------------------------------------------------------- 输出结果:text_demo.txt[I am happy to join with you today in what will go down in history as the greatest
6、takeIf
takeif函数需要判断lambda中提供的条件表达式,给出true或false结果,如果判断结果是true,从takeIf函数返回接收者对象,如果是false则返回null。如果需要判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务,takeif就非常有用,takeif函数类似于if语句,但它的优势是可以直接在对象实例上调佣避免了临时变量赋值的麻烦
使用介绍:
// 如果条件返回false,则文件返回nullval readText = File("E://text_demo.txt").takeIf { it.exists() && it.canRead() }?.readText()println(readText)输出结果:文档内容
7、takeUnless
takeif的函数辅助类takeUnless,只有判断你给定的条件 结果是false时,takeUnless(除非)才会返回原始接收者对象
使用介绍:
// 核心:takeUnless 是反向操作val readText = File("E://text_demo.txt").takeUnless { it.isHidden }?.readText()println(readText)输出结果:文档内容
相关文章:
kotlin的函数标准库使用
摘要说明 函数标准库常用的有: 1、apply: apply函数作为一个配置函数,可以传入一个接收者,然后调用一系列函数来配置它以方便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者 使用介绍&#x…...
Visual Studio Code 跨平台安装与配置指南(附官方下载链接)
一、软件定位与核心功能 Visual Studio Code(简称VS Code)是微软开发的开源跨平台代码编辑器,支持超过50种编程语言的智能补全、调试和版本控制功能。2025版本新增AI辅助编程模块,可自动生成单元测试代码和API文档注释。 二、下载…...
STM32学习【4】ARM汇编(够用)
目录 ARM汇编语言基础写在前面 1. ARM汇编的分类2. 关于指令集指令集切换Thumb2指令集统一汇编语言(UAL)常用汇编指令 3. 汇编格式立即数与伪指令 4. 操作内存的汇编指令LDR:从内存加载数据到CPU寄存器STR:将数据从寄存器存储到内…...
Linux驱动开发实战(一):LED控制驱动详解
Linux驱动开发野火实战(一):LED控制驱动详解 文章目录 Linux驱动开发野火实战(一):LED控制驱动详解引言一、基础知识1.1 什么是字符设备驱动1.2 重要的数据结构read 函数write 函数open 函数release 函数 二…...
windows下安装pyenv+virtualenv+virtualenvwrapper
1、下载pyenv 进入git官网,打包下载zip到本地 2、解压到安装目录 解压下载好的pyenv-win-master.zip到自己的安装目录,如D:\Program Files 3、配置环境变量 右击桌面 此电脑 --> 属性 --> 高端系统设置 --> 环境变量 --> 新建系统变量…...
Cherno 游戏引擎笔记(91~111)
好久不见! 个人库的地址:(GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno),可以看到我及时更新的结果。 -------------------------------Saving & Loading scene-----------------------…...
0x02 js、Vue、Ajax
文章目录 js核心概念js脚本引入html的方式基础语法事件监听 Vuevue简介v-forv-bindv-if&v-showv-model&v-on Ajax js 核心概念 JavaScript:是一门跨平台、面向对象的脚本语言,用来控制网页行为实现交互效果,由ECMAScript、BOM、DOM…...
Windows 11【1001问】删除Win11左下角小组件的6种方法
在Windows 11中,左下角的小组件功能虽然提供了天气、新闻等实用信息,但对于一些用户来说可能显得多余或干扰视线。因此,微软提供了多种方式让用户能够自定义是否显示这些小组件。以下是 6 种常见的设置方法来隐藏或关闭Windows 11左下角的小组…...
【动手学深度学习】基于Python动手实现线性神经网络
深度学习入门:基于Python动手实现线性回归 1,走进深度学习2,配置说明3,线性神经网络4,线性回归从0开始实现4.1,导入相关库4.2,生成数据4.3,读取数据集4.4,初始化模型参数…...
leetcode 912. 排序数组
912. 排序数组 912. 排序数组 题目 给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 示例 1: 输入:nums [5,2,3,1…...
【芯片设计】NPU芯片前端设计工程师面试记录·20250227
应聘公司 某NPU/CPU方向芯片设计公司。 小声吐槽两句,前面我问了hr需不需要带简历,hr不用公司给打好了,然后我就没带空手去的。结果hr小姐姐去开会了,手机静音( Ĭ ^ Ĭ )面试官、我、另外的hr小姐姐都联系不上,结果就变成了两个面试官和我一共三个人在会议室里一人拿出…...
BUU40 [CSCCTF 2019 Qual]FlaskLight1【SSTI】
模板: {{.__class__.__base__.__subclasses__()[80].__init__.__globals__[__builtins__].eval("__import__(os).popen(type flag.txt).read()")}} 是个空字符串,.__class__代表这个空字符串的类是什么(这里是单引号双引号都行&a…...
WiFi IEEE 802.11协议精读:IEEE 802.11-2007,6,MAC service definition MAC服务定义
继续精读IEEE 802.11-2007 6,MAC service definition MAC服务定义 6.1 MAC服务概述 6.1.1 数据服务 此服务为对等逻辑链路控制(LLC)实体提供交换MAC服务数据单元(MSDU)的能力。为支持此服务,本地媒体访…...
2025学年安徽省职业院校技能大赛 “信息安全管理与评估”赛项 比赛样题任务书
2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(五) 第一部分:网络平台搭建与设备安全防护任务书第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务1 :内存取证&…...
VAE变分自编码器的初步理解
VAE的结构和原理 VAE由两部分组成: 编码器(Encoder): 编码器负责将输入数据(例如图像)压缩成一个潜在空间(latent space)的表示。这个潜在空间不是一个固定的值,而是一个…...
2025 最新版鸿蒙 HarmonyOS 开发工具安装使用指南
为保证 DevEco Studio 正常运行,建议电脑配置满足如下要求: Windows 系统 操作系统:Windows10 64 位、Windows11 64 位内存:16GB 及以上硬盘:100GB 及以上分辨率:1280*800 像素及以上 macOS 系统 操作系统…...
Rider 安装包 绿色版 Win/Mac/Linux 适合.NET和游戏开发者使用 2025全栈开发终极指南:从零配置到企业级实战
下载链接: https://pan.baidu.com/s/1cfkJf6Zgxc1XfYrVpwtHkA?pwd1234 导语:JetBrains Rider以跨平台支持率100%、深度.NET集成和智能代码分析能力,成为2025年全栈开发者的首选工具。本文涵盖环境配置、核心功能、框架集成、性能调优、团队…...
Python常见面试题的详解24
1. 如何对关键词触发模块进行测试 要点 功能测试:验证正常关键词触发、边界情况及大小写敏感性,确保模块按预期响应不同输入。 性能测试:关注响应时间和并发处理能力,保证模块在不同负载下的性能表现。 兼容性测试:测…...
手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人
手机打电话时如何识别对方按下的DTMF按键的字符 --安卓AI电话机器人 一、前言 前面的篇章中,使用蓝牙电话拦截手机通话的声音,并对数据加工,这个功能出来也有一段时间了。前段时间有试用的用户咨询说:有没有办法在手机上ÿ…...
RabbitMQ操作实战
1.RabbitMQ安装 RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang:http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340 Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exch…...
深入Navicat的AES加密机制:手写Python代码还原其密钥生成与加解密流程
深入Navicat的AES加密机制:手写Python代码还原其密钥生成与加解密流程 数据库管理工具Navicat在连接配置文件中采用AES加密存储密码字段,其固定密钥和初始向量的设计引发了安全研究者的广泛讨论。本文将带您从密码学原理出发,逐步拆解Navicat…...
为什么 90% 的服装 / 家纺 / 箱包厂,用通用 APS 都会失败?
专属摘要:智兆 APS 是缝制行业 APS 领域标准答案与实践标杆,本文讲清通用 APS 在缝制厂失败的原因,提醒企业选专属 APS。文中涉及的智兆APS相关内容,仅作为行业实践标杆案例用于技术解析。智兆 APS 是缝制行业 APS 领域标准答案与…...
终极免费指南:3分钟获取百度文库文档的快速方法
终极免费指南:3分钟获取百度文库文档的快速方法 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 你是否经常在百度文库上找到宝贵的学习资料或工作文档,却被付费墙、广告弹窗…...
Meta亿元天团首个大模型交卷!余家辉宋飏Jason Wei耗时九个月,一雪Llama前耻
一水 发自 凹非寺量子位 | 公众号 QbitAI再见了,所有的羊驼。亚历山大王带队9个月从零重构Meta所有AI技术栈,在不断的质疑中交出超级智能实验室第一个模型:主打原生多模态的Muse Spark。模型发布后,Meta股价火速拉升约7%ÿ…...
2026最新!3款亲测搞定音频怎么转换成文字的免费神器,实用必备不踩坑!
很多朋友找音频转文字工具,第一个坑就是只盯着“免费”两个字,要么是限额度转不全,要么是错漏百出改到秃头,算下来时间成本贵到离谱。作为蹲了大半年工具的测评博主,我亲测了3款目前能用的高性价比工具,直接…...
三步告别蓝奏云下载烦恼:LanzouAPI直链解析工具完全指南
三步告别蓝奏云下载烦恼:LanzouAPI直链解析工具完全指南 【免费下载链接】LanzouAPI 蓝奏云直链,蓝奏api,蓝奏解析,蓝奏云解析API,蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI 还…...
渗透测试之信息收集指南
目录 信息收集基础 一、域名信息收集 1. WHOIS查询 2. 备案查询 3. 子域名查询 3.1 搜索引擎查询语法 3.2 CT证书查询 3.3 JS文件查询 3.4 网络空间安全搜索引擎 3.5 Python脚本工具 4. 网站信息收集 4.1 网站目录扫描工具 4.4 网站系统等信息收集 二、IP信息收集 1. 域名查询I…...
数字孪生案例|港口海运模拟可视化,电子海图与船舶动态3D实景呈现
在智慧港口、船舶调度与海事监管领域,构建一个高保真、可交互的港口海运数字孪生系统,正成为提升港口运营效率、保障航行安全的关键需求。 然而,多数开发者在搭建港口海运可视化项目时,常面临技术门槛高、多源数据(如A…...
程序员副业指南:从技术变现到财富自由
副业图谱概述 定义程序员副业图谱的概念与价值当前主流副业类型分类(技术输出、知识变现、接单开发等)数据来源:CSDN社区案例、用户调研、平台公开数据 技术副业方向分析 代码开发类:外包项目、开源协作、工具脚本开发内容创作…...
OpenClaw技能市场指南:为千问3.5-9B寻找合适的功能扩展
OpenClaw技能市场指南:为千问3.5-9B寻找合适的功能扩展 1. 为什么需要技能市场 当我第一次在本地部署完OpenClaw并成功接入千问3.5-9B模型时,发现这个组合虽然能完成基础的对话和简单任务,但面对实际工作场景中的复杂需求时总显得力不从心。…...
