kotlin 高阶函数用法

继续测试下kotlin常用高阶函数用法,也就是有参数是函数的函数:

Kotlin 复制代码
private fun testOthers() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val evenNumbers = numbers.filter { it % 2 == 0 }
    val doubledNumbers = numbers.map { it * 2 }
    println("zxzx, numbers: $numbers")
    println("zxzx, evenNumbers: $evenNumbers")
    println("zxzx, doubledNumbers: $doubledNumbers")

    val numbers2 = listOf("1", "2", "灭绝师太", "3", "周芷若")
    val validNumbers = numbers2.mapNotNull { it.toIntOrNull() } // 字符串转换数字,过滤空值
    println("zxzx, validNumbers: $validNumbers")

    // 扁平化嵌套集合
    val lists = listOf(listOf("i", "always"), listOf("love"), listOf("vicky", "du"), listOf("!"))
    val result = lists.flatMap { it }
    println("zxzx, $result")

    data class User(val name: String, val hobbies: List<String>)

    val users = listOf(
        User("vicky du", listOf("网购", "凉皮面", "鸭血粉丝", "摄影", "八卦", "户外活动")),
        User("daling zhou", listOf("户外活动", "编程", "花生", "打游戏", "刷美女"))
    )

    val allHobbies = users.flatMap { it.hobbies } // 从对象中提取嵌套集合
    println("zxzx, $allHobbies")

    data class MeiNv(val name: String, val age: Int) // 美人
    val meiNvs = listOf<MeiNv>(MeiNv("西施", 18), MeiNv("貂蝉", 16)
        , MeiNv("陈圆圆", 17), MeiNv("灭绝师太", 38), MeiNv("苏小妹", 15))
    val result1 = meiNvs.takeWhile { it.age < 30 }.dropWhile { it.age < 16 } // 筛选条件
    println("zxzx, 选美结果为:")
    result1.forEach { println("zxzx, ${it.name}")}

    // 使用 reduce 计算总和
    val sum = listOf(1, 2, 3, 4, 5).reduce { acc, value -> acc + value }
    println("zxzx, sum = $sum")

    // reduce函数计算最大值
    println("zxzx, max: ${listOf(1, 2, 3, 4, 5).reduce { acc, value -> if (acc > value) acc else value }}")

    // 字符串拼接
    println("zxzx, ${listOf("司马懿:", " ", "听诸葛亮弹琴,如观其肺腑也。").reduce { acc, word -> acc + word }}")
}

打印:

ok. 用起来很灵活,很方便。

相关推荐
G018_star sky♬几秒前
为什么java新建一个对象,需要obj o = new obj()这种写法
java·开发语言
星恒讯工业路由器5 分钟前
工业网络设备选型:导轨式、机架式与车载式的部署差异
开发语言·网络·数据库·php·工业路由器·导轨式·车载式
2601_962885726 分钟前
如何用 Python 把多只股票对齐成一张宽表?
开发语言·python
蹊黎3 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
程序猿追9 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓9 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播9 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
墨云安全10 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
摇滚侠10 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y10 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python