梳理学习Kotlin,函数式编程

Kotlin算法面试宝典:函数式编程与实战技巧 算法作为程序员的核心能力,在技术面试中占据重要地位。Kotlin作为现代JVM语言,凭借其函数式编程特性和丰富的集合操作API,为算法实现提供了独特优势。理解基础数据结构如数组、链表、哈希表的实现原理,掌握双指针、回溯、动态规划等算法模式,是解决复杂问题的关键。Kotlin的扩展函数、序列惰性求值和协程支持等特性,能够显著提升算法代码的可读性和执行效率。在面试场景中,合理运用Kotlin的when表达式、作用域函数和空安全机制,可以编写出既简洁又健壮的算法实现。本文通过典型算法题的Kotlin解决方案,展示 阅读详情
概念:

​ 一切皆可视为函数。与面向对象(OOP),‘一切皆对象’ 相对应 ‘一切皆函数’也是函数式编程的含义。包括经常被形象成为,函数在Kotlin中是一等公民,这句话也是相对OOP编程范式中,方法必须依托类或对象才能存在。对象可以被传递,函数也可以被传递,对象可以作为返回值,函数也可以作为返回值。

如何理解Lambda expression

​ 个人理解为,代数方程,函数的输入和输出明确后,方程式就已经定好 y = n * m,对于输入为类型为n, m,返回值为y类型的函数,都可以转换为相同的函数签名,数学上叫‘泛函数’, 即lambda。lambda简化了函数的定义。

为什么要称为‘高阶’函数

​ wiki上定义为,接受一个或多个函数作为输入,或输出一个函数。所以“高”对应的“低”,是指不符合这两个条件,也就是一阶函数(first-order function),不依赖其他函数,有直接返回值(类似递归基)。所以“高阶”对应了函数映射到另一个“低阶”函数,最终求解。

如何理解懒加载

​ 需要计算,才计算其中内容,声明函数,传递函数,不会导致函数执行

高阶函数实例
fun twice(f: (Int) -> Int): (Int) -> Int = { x ->
    f(f(x))
}

val plusTwo = twice { it + 1 }
val plusTwo = twice { it::inc //函数式 }

println(plusTwo.invoke(2))
println(twice { it + 1 }.invoke(2))
一些作用域高阶函数
getUserName()?.let {
    // it, 无返回值,空安全
}

val name = getUserName().apply {
    // this, 返回自身,用于同一个对象多次调用
}

val name = with(getUserName()) {
    // this, 返回最后一行,用于泛对象多次调用
    "Hello"
}

val name = getUserName()?.run { 
    // this, 返回最后一行, 空安全,常用于缩小变量作用域
    "Hello"
}

val name = getUserName()?.also { 
    // it, 返回自身,空安全,用于日志,拦截
}

// Closeable 使用后释放
val name = File("book.txt")
    .bufferedReader()
    .use { it.readLine() }
// Closeable 使用后释放
val name = File("book.txt")
    .useLines { 
        println(it)
    }
带接收者的Lambdas

​ 上面apply和let两个高阶函数的差异为

public inline fun <T, R> T.let(block: (T) -> R): R
public inline fun <T> T.apply(block: T.() -> kotlin.Unit): T

T.() -> kotlin.Unit被称为带接收者的lambda,可以理解为扩展方法类似的实现,将输入It,替换为this.

Lazy 懒加载
public fun <T> lazy(initializer: () -> T): kotlin.Lazy<T>
val name by lazy {
    "Brook"
}

val friends = sequenceOf("Lucy, Eric, Tom")
val nums = (1..1000).asSequence()

By lazy 将实现委托,返回了kotlin.Lazy,当调用到的时候,才会真正的调用initializer: () -> T,实现大对象,延迟初始化,非必要对象不初始化,减少性能损耗。

​ 而对于集合,连续的数据,则是通过Sequence来实现,类似于Java8的Stream,操作符分为中间操作符,如ma p, filter 和终结操作符,take, toList(), 将数据以数据流的形式发送,处理。降低大集合内存占用和不必要的数据的占用。

性能差异

普通集合类似于批处理,一次求解,大数据量复杂操作,性能提升明显。

val timeSquence = measureTimeMillis {
    val nums = (1..1000000).asSequence()
        .filter { (it and 1) == 1 }
        .take(2)
}
println(timeSquence)
val time = measureTimeMillis {
    val nums = (1..1000000)
        .filter { (it and 1) == 1 }
        .take(2)
}
println(time)
宇宙中万事万物都是互相联系的——一切皆是映射,映射即函数,函数即运动变化 在数学中,函数是一种将一个集合中的元素映射到另一个集合中的元素的关系。fA→BfA→B其中,A 称为定义域(domain),B 称为值域(codomain),f 将 A 中的每个元素 x 映射到 B 中的一个元素 y 上,即 f(x) = y。著名函数的表达式:fxexf(x) = e^xfxexfxlog⁡xfxlogx三角函数:正弦函数fxsin⁡xfxsinx余弦函数fxcos⁡xfxcosx正切函数fx。 阅读详情

相关推荐

Kotlin在医疗大健康域的应用实例探究与编程剖析(上)

Kotlin 是由 JetBrains 公司开发的一种编程语言,其发展历程丰富多样,对现代软件开发产生了深远影响。2011 年 7 月,JetBrains 在 JVM 语言峰会上首次向外界公布了 Kotlin,此时它作为一门新兴编程语言,初步展现出解决 Java 编程痛点、探索更高效编程方式的潜力,吸引了行业内开发者的关注目光。2012 年 2 月,Kotlin 正式开源,开启了广泛的社区协作与技术探索之旅,众多开发者得以参与其中,共同推动其发展,代码库得以迅速丰富,各种创新性的特性和功能不断涌现。

AllenLV的博客 2312

Kotlin的函数式编程

如果匿名内部类只包含一个方法,那么语法会显得冗余。Lambda表达式设计出来就是为了解决这一问题,同样也是匿名函数。

qq_44016573的博客 657

汽车级智能栅极驱动器深度解析 | 连载03:功能框图与工作模式详解

在前两期连载中,我们分析了DRV871x-Q1的产品架构、引脚配置和电气特性。本期我们将深入探讨DRV871x-Q1的功能框图和工作模式,这是理解芯片内部工作机制的关键。通过分析功能框图,我们能够清晰地了解各功能模块之间的关系和信号流向;通过工作模式分析,我们能够掌握芯片在不同应用场景下的配置方法。这些知识对于系统设计和故障排查都至关重要。

VehSwHwDeveloper的博客 1098

Kotlin函数式编程

什么是函数式编程 函数式编程是于面向对象编程范式相齐名的一种编程方式,主要依赖于高阶函数返回的数据,这些高阶函数专用于处理各种集合,可方便的联合多个同类函数构建链式操作以创建复杂的计算行为。在Kotlin中支持多种编程范式, 有以下函数类别: 变换transform、过滤filter、合并combine。 变换 变换是函数式编程的第一大类函数,变换函数会遍历集合内容,用一个以值参的形式传入的变换器函数,变换每一个元素,然后返回已包含修改数据的集合并可传给链上的其他函数。 Kotlin中常见的变换函数中有ma

seevc的专栏 2149

UnityWebGL异常捕获全攻略:从报错提示到完美解决的3种配置方案

本文详细解析了UnityWebGL项目中异常捕获的三种核心配置方案:禁用异常、仅捕获显式异常以及完全捕获异常(无堆栈跟踪)。通过对比不同方案在构建体积、运行性能及错误信息详细度上的差异,帮助开发者根据开发、测试与发布阶段的不同需求,选择并配置最优的异常处理策略,从而有效提升WebGL应用的调试效率和线上稳定性。

5f4d3s2a1q的博客 398

Day2 十分钟带你解决逆向中对称加密算法 (RC4)

在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种串流加密算法,密钥长度可变。他加密解密使用相同的密钥,因此也被称为“流加密算法”。RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。由于异或运算的对合性,RC4加密解密使用同一套算法。

m0_73779708的博客 1289

【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )

一、函数式编程简介、 1、编程范式、 2、高阶函数、 3、函数式编程、 4、前端开发技术、 二、函数类别、 三、变换函数、 四、map 变换函数、 1、map 函数原型分析、 2、map 函数设计理念、 3、代码示例、 五、flatMap 变换函数、 1、flatMap 函数原型分析、 2、代码示例、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

GD32F407工程模板搭建全记录:从零整理固件库、创建文件夹到编译通过

本文详细记录了GD32F407工程模板的搭建过程,从固件库整理、目录规划到Keil环境配置,帮助开发者快速搭建可维护的嵌入式工程结构。重点介绍了开发环境搭建、工程目录设计、Keil配置及常见编译问题解决方案,适合嵌入式开发者参考。

weixin_29164497的博客 118

六、kotlin的函数式编程

答: 在中是一种用限定作用域, 以 区分参数和函数体的表达式, 叫 其本质是代码块, 你也可以理解成可调用的函数类型对象(但根据反编译发现其实不是, 它的实现方式有很多. 比如: 生成一个函数, 然后传递函数引用等等, 方式还挺多) 其中 就是lambda表达式 和 表示 lambda函数对象调用 函数优点:缺点:代码可读性较差(用习惯了, 反而比较简单)使用 有些情况下需要注意 , 有时候没有, 但有些时候又有(这在后面有解释)最主要的用法用于参数传递, 一般是函数参数为 函数类型, 我们传递个

bangiao的博客 982

生成模型实战 | 基于Transformer生成音乐

本文介绍了基于Transformer架构的音乐生成方法,将音乐视为一系列事件序列进行处理。与将音乐表示为多维图像的MuseGAN不同,该方法使用类似GPT的仅解码器模型,基于先前事件预测下一个音乐事件。模型使用MIDI格式的钢琴音乐数据,通过分词处理将音符转换为note-on、note-off、time-shift和velocity四种事件类型,共388个独特词元,映射为索引序列后输入网络。训练完成后,可通过调整温度参数控制生成音乐的新颖性,从而创作出风格类似训练数据且连贯逼真的音乐作品。

盼小辉丶的博客 5806

IEEE Journal of Biomedical and Health Informatics(JBHI)投稿经验分享

《IEEE Journal of Biomedical and Health Informatics投稿经验分享》详细记录了在影响因子6.7的中科院一区期刊JBHI的投稿历程(2025.1-5月,历时4个月)。文章重点分析:1)审稿特色:4位审稿人差异显著,领域专家意见专业但要求严苛;2)修改要点:需重视大修(补充实验/原理阐述),并注意将回复内容同步至正文;3)期刊特点:送审率高但审稿严格,常规投稿周期约4-5个月;4)实用建议:建议首次大修全力以赴,善用AI工具辅助写作,避免拖延。

LiRongLu_的博客 5071

Kotlin 语言 知识点整理1【个人用】

Kotlin作为JetBrains开发的现代化语言,以其简洁、安全和高效特性成为Java的理想替代。它与Java完全互操作,共享JVM平台和生态系统,但通过空安全机制、扩展函数、数据类等特性大幅减少样板代码。核心优势包括:1)强制空安全设计杜绝NPE;2)支持函数式编程和Lambda表达式;3)协程简化异步编程;4)扩展函数增强代码组织。Java开发者应重点掌握空安全处理、集合操作、作用域函数及协程应用,通过IDE转换工具和Kotlin标准库快速上手。渐进式迁移策略和"以Kotlin方式思考&qu

indeedes的博客 260

YOLO11检测中的内存占用分析与优化:讲解如何分析并优化推理时的内存使用

YOLOv11模型内存分析与优化摘要:本文系统分析了YOLOv11目标检测模型的内存使用模式,重点探讨了显存(VRAM)、系统内存(RAM)和共享内存的特性差异。通过PyTorch内置工具和自定义分析器,详细剖析了骨干网络、颈部网络和检测头各组件内存占用规律,指出激活值内存与输入尺寸呈平方级增长关系。文章提供了卷积层内存计算公式,并强调合理规划"工作台"(显存)与"仓库"(内存)间的数据流动是优化关键。最后通过流程图直观展示了YOLOv11推理过程的三类内存使用模式,

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 343

如何快速上手Kotlin Koans:10个核心技巧帮你快速入门

Kotlin Koans是一个专为初学者设计的交互式编程练习项目,通过实践任务帮助开发者掌握Kotlin语言的核心特性和最佳实践。本文将分享10个实用技巧,助你高效完成Kotlin Koans学习之旅,从语法基础到高级特性逐步进阶。 ## 1. 从基础模块开始:循序渐进掌握核心语法 Kotlin Koans的练习按难度分级组织,建议从`i_introduction`模块开始学习。该模块包含12

gitblog_07107的博客 392

Freeswitch 如何检测链路是否有回铃音

Freeswitch回铃音检测解决方案 问题描述:呼叫手机时,虽然信令正常(183/180),但部分手机无回铃音,导致坐席无法判断是否接通,用户体验差。 解决方案: 先播放本地音频作为回铃音 实时检测用户侧是否有声音输入 检测到声音后自动切换为用户侧音频 技术实现: 使用Freeswitch APP实现功能 创建结构体保存实例数据(包括铃声文件、会话句柄、VAD检测器等) 通过media bug机制实现音频流的替换 利用VAD(语音活动检测)技术监控用户侧声音 当检测到用户说话时自动终止本地铃声播放 该方案

2301_81507069的博客 51

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

最新Kotlin学习(5)函数与函数式编程,大厂的面试题怎么这么难

针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

2401_84561579的博客 1037

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Kotlin 全知识点复习+详细梳理

Kotlin语言知识点全集梳理,涵盖基础语法到高级特性。主要内容包括:基础语法(程序入口、变量常量、注释)、数据类型与操作(基本类型、类型转换、字符串)、运算符与表达式、控制流(条件语句、循环)、数组与集合操作、空安全机制、函数定义与高阶函数、面向对象(类与对象、继承、接口、抽象类、数据类、密封类)、泛型与委托、协程编程、枚举与注解、反射特性、类型别名、作用域函数等。每个知识点均配有简明示例代码,如数据类的自动生成方法、协程的异步处理、扩展函数的实现等。本文可作为Kotlin开发的速查手册,帮助开发者快速掌

2301_79847249的博客 1943

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

颠覆Android开发行业未来,让Kotlin成为您的新宠

Kotlin受到了许多现代编程语言的影响,如Swift、Scala、Groovy和C#,它被认为是一种功能强大、直观易用、安全可靠的编程语言。此外,Kotlin的语法简洁易懂,与Java的互操作性良好,也让许多Java开发者更容易地转向Kotlin。Kotlin的开发者JetBrains公司还在不断推进Kotlin的发展,包括开发新的语言特性、优化编译器、扩展Kotlin在不同平台间的应用等。总之,Kotlin的前景看好,它正在成为一门强大而广泛应用的编程语言,将继续在不同领域得到更广泛的应用和发展。

m0_71524094的博客 1063

kotlin中常用关键字梳理

问题背景 kotlin开发和学习过程中,会使用到和接触到很多关键,现对于梳理并持续更新。 问题分析 1、Kotlin的硬关键字 关键字 说明 as 用于做类型转换或为 import 语句指定别名 as? 类型安全 的类型转换运算符。 fun 声 明函数 in 在 for 循环中使用; in 还可作为双目运算符,检查 一个值...

baorant24的博客 492

终极知识图谱:从分布式系统到函数式编程的完整指南

你是否曾经面对海量的技术文档感到无所适从?📚 translations项目为你精心整理了计算机科学领域的经典文献中文翻译,构建了一套完整的知识图谱。这个开源项目汇集了分布式系统、函数式编程、并发编程等核心技术领域的优质资料,为开发者提供了一条清晰的学习路径。 ## 🎯 项目核心价值与定位 translations项目专注于将经典IT资源翻译成中文,涵盖从基础概念到高级实践的各个层面。项目坚

gitblog_01005的博客 295

Android开发进阶,不学kotlin真不行吗?

如今,在软件开发领域,除了现在比较热门的人工智能技术和大数据技术之外,移动开发依然是受到大家关注的领域分支,而移动开发最重要的一门技术就是Android开发。Java作为Android开发的官方标准语言,其语法的设计思想还停留在纯命令式语言时代,在函数式语言的大背景下,Java显得有点落伍。虽然随着Java 8和Java 9版本的发布,Java也在向函数式语言靠近,但是Java8和Java9的市场份额并不高,好多的项目还停留在Java 6的时代。特别是对于Android开发者来说,想体验函数式编程的优势似乎

m0_56255097的博客 484

Kotlin基础知识学习笔记

Kolin的基础用法,持续更新中

weixin_45756537的博客 1160

kotlin学习 基础知识一览

本文介绍了在Android Studio中使用Kotlin语言的基础知识。主要内容包括:1) 创建Kotlin项目和编写main函数;2) 变量声明(val不可变,var可变)和类型推导;3) 函数定义和语法糖简化;4) 逻辑控制(if条件语句、when条件语句);5) 循环语句(for-in循环和区间操作);6) 类与对象、继承和构造函数(主构造函数和次构造函数)。通过具体代码示例展示了Kotlin的简洁语法特性,如自动类型推导、函数简化表达式等。

来来来,走一走 1331

是时候梳理一下Kotlin的知识点了

是时候梳理一下Kotlin了 很不喜欢将平时的学习记录成博客,就像流水账一样,觉得没有深度,但是深奥的东西就那么些,多数时间的工作中,用到的仍是基础知识。 我是从2017年开始使用Kotlin写代码,转眼已是3年,今天突然想起,自己有一天不写代码了,曾经翻阅的资料是不是就都消失浪费了,猛然间,觉得,将基础知识梳理一下,将平时遇到的难点、踩过的坑也一并分享出来,与大家共同学习和进步,若能在某个不经意间帮助到一些人,则所费力气,也是值得的,自己也就心满意足了。 ...

文远 262

该如何高效实用Kotlin?学习路线+知识点梳理

开头 大家都知道,找工作的时候高薪不好拿,一般人能拿 30k 的 offer 就不错了。据我所知百分之九十的Android开发都在30k以下! 但是在我的群里有一位同学,平时就喜欢研究源码和框架,然后经过一个月的刷题,跳槽到头条,拿到了 50k 的月薪,我觉得太厉害了,羡慕嫉妒恨啊。 后来我和他聊了下,发现他技术确实好,在刷题期间,除了算法,他还把自己的 Android 笔记拿了出来,里面都是他平时的积累,内容全面,深度也有,有插件化、依赖注入,还有各种架构知识。 果然,只要技术好,走到哪里都不怕啊。大家在

m0_57081140的博客 245

梳理学习Kotlin,Function的用法

示例: main函数 fun main(args: Array<String>) {} 完整函数 fun fib(n: Int): Long { return if (n < 2) 1 else fib(n - 1) + fib(n - 2) } 简化返回值函数 fun fib(n: Int): Long = if (n < 2) 1 else fib(n - 1) + fib(n - 2) 参数带默认值 fun fib(n: Int = 5): Long = if (

PirateBrook的天梯 2895
上一篇: 梳理学习Kotlin,特殊操作符的用法
下一篇: ViewModel解决了什么问题?
PirateBrook
博客等级 码龄11年 90粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值