IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin入门笔记(九)集合的函数式编程 API(上) -> 正文阅读

[移动开发]Kotlin入门笔记(九)集合的函数式编程 API(上)

前言:本教程最好在有JAVA的基础下进行学习

这里先纠正一下《第一行代码 Android 第三版》中的一个问题奥!那时候使用的是 maxBy 函数 ,现在这个函数已经弃用,改为 maxByOrNull?函数?:

Deprecated:?Use?maxByOrNull?instead.

参考:maxBy - Kotlin Programming Language

例题:

如何在一个水果集合内找到单词最长的哪个水果?

或许你会这样写:

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
var maxLengthFruit = ""
for (fruit in list) {
    if(fruit.length > maxLengthFruit.length) {
        maxLengthFruit = fruit
    }  
}  
println(maxLengthFruit)

不错,但是用上 Kotlin 的函数 API 可以变得更简介:

fun main() {
    val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
    var maxLengthFruit = list.maxByOrNull { it.length }
    println(maxLengthFruit)
}

上述代码使用的就是函数式API的用法,只用一行代码就能找到集合中单词最长的那一个。为什么可以这样写?请继续往下看。

是不是很神奇?

Lambda表达式语法结构

{ 参数名1 : 参数类型 ,? 参数名2?:?参数类型? ?->? ?函数体 }

这已经是 Lambda 表达式最完整的写法,很多后续的情况下会更简洁。

回到刚刚的例子,前面使用的函数式API语法结构看上去很特殊,但其实

就是一个普通的函数而已,只不过它接收的参数是一个 Lambda 表达式maxByOrNull函数?的工作原理就是根据传入的集合进行遍历,从而找到该条件的最大值。比如想找的是单词最长的水果,那条件自然就是单词的 长度了。

理解了上面所述的条件,

第一次写的:

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
var maxLengthFruit = ""
for (fruit in list) {
    if(fruit.length > maxLengthFruit.length) {
        maxLengthFruit = fruit
    }  
}  
println(maxLengthFruit)

?就可以改成:

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
val lambda = { fruit : String -> fruit.length }
val maxLengthFruit = list.maxByOrNull(lambda)

这样,maxByOrNull函数?就接收了一个 Lamda表达式作为参数。①Kotlin允许直接将Lambda表达式传入函数中。所以我们还可以再缩写:

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
val maxLengthFruit = list.maxByOrNull({ fruit : String -> fruit.length })

Kotlin 又规定,②当 Lambda参数 是最后一个参数时,可以将 Lambda表达式 移至函数括号的外面。?所以我们继续改进,就变成了:

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
val maxLengthFruit = list.maxByOrNull(){ fruit : String -> fruit.length }

可是这括号好像多余了...没错。所以 Kotlin 叒 规定,③如果 Lambda参数 是唯一一个参数,还可以将函数的括号省略

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
val maxLengthFruit = list.maxByOrNull { fruit : String -> fruit.length }

④Kotlin 拥有出色的类型推导机制,所以 Lambda 表达式大多数情况下不必声明参数类,:

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
val maxLengthFruit = list.maxByOrNull { fruit  -> fruit.length }

但是,⑤Kotlin?叕规定,当 Lambda表达式 二点参数列表只有一个参数的时,也不必声明参数名,而是用 it关键字 来代替,所以代码变成了:

val list = listOf("Apple","Banana","Pear","Grape","Watermelon")
val maxLengthFruit = list.maxByOrNull { it.length }

阿这....

Kotlin 这不是 语法糖 超甜,这是 语法糖 齁咸。他们甜也就算了,他们甜的让我心慌.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?---出自:韩美娟 评价 糖果超甜 语录

开个玩笑哈,言归正传。Kotlin的许多语法糖大大的减少了开发者的代码量。Java恐怕要十行的代码,Kotlin 三行就搞定了。再说说安卓众说周知的 MVC模式 ,Activity 负担巨大。(所以后来比较多人选择了 MVP 与 MVVM 模式)当一个 500行的 Activity 缩短成了100行,这看起来是不是舒服多了?

在文章的结尾我插几张图哈,网上看到的,觉得比较有意思。看着乐呵一下就完啦!生活中有时就是要苦中作乐,不同行业的程序员 斗斗图,拌拌嘴 又何尝不是一件有意思的事情呢 ~?

如果喜欢这个系列的话,不妨点个关注吧!感谢您的观看!

参考:

? ? ? ? 《第一行代码 Android (第三版)》 ? ---郭霖

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 21:17:24  更:2022-02-14 21:18:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:29:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码