当前位置: 首页 > news >正文

kotlin: flaten函数/与flatMap函数的区别

一,功能

flatten 函数主要应用于嵌套集合(如 List of List 或 Set of Set 等),
它会将嵌套集合中的所有元素合并到一个单一层次的集合中。

flatMap 不仅可以将嵌套集合扁平化,更重要的是它允许你对每个子集合应用一个映射函数来生成新的元素

二,例子

代码:

        //处理按钮点击事件binding.button3.setOnClickListener {val numberSets = listOf(setOf(1, 2, 3), setOf(4, 5, 6), setOf(1, 2))println(numberSets.flatten())    //[1, 2, 3, 4, 5, 6, 1, 2]val deepArray = arrayOf(arrayOf("Name:"),arrayOf('D', 'a'),arrayOf('i', 's', 'y'))val list = deepArray.flatten()println("list: $list")     // [Name:, D, a, i, s, y]}

运行结果:

image

三,例子:flatten 函数只能用于直接嵌套的情况

代码:

        //处理按钮点击事件binding.button1.setOnClickListener {val nestedList = listOf(listOf("a", "b"), listOf("c", "d"))val flattenedList = nestedList.flatten()println("flaten结果:$flattenedList") // ["a", "b", "c", "d"]val nestedList2 = listOf(listOf(listOf("a", "b"), listOf("c", "d")),listOf(listOf("e", "f"), listOf("g", "h")),)val flattenedList2 = nestedList2.flatten()println("flaten结果:$flattenedList2") // [[a, b], [c, d], [e, f], [g, h]]}

运行结果:

image

三,与flatmap的区别

flatten 函数只能用于直接嵌套的情况,亦即由Collection组成的Collection
对于间接嵌套的情况,例如一个由对象构成的Collection,每个对象包含一个Collection类型的属性,则需要用到flatMap函数

四,例子:

代码:多层嵌套的情况,可以做两次flatMap或

        //处理按钮点击事件binding.button2.setOnClickListener {val nestedList2 = listOf(listOf(listOf("a", "b"), listOf("c", "d")),listOf(listOf("e", "f"), listOf("g", "h")),)val flattenedList2 = nestedList2.flatMap {it.flatMap { it }}println("flatMap结果:$flattenedList2") // [a, b, c, d, e, f, g, h]val flattenedList3 = nestedList2.map{it.flatMap { it }}.flatten()println("map结果:$flattenedList3")    // [a, b, c, d, e, f, g, h]val flattenedList4 = nestedList2.flatMap {it.flatten()}println("flaten结果:$flattenedList4") // [a, b, c, d, e, f, g, h]}

运行结果:

image

五,flatMap的例子

代码:

        //处理按钮点击事件binding.button3.setOnClickListener {val lists = listOf(listOf("hello"), listOf("world"))val chars = lists.flatMap {it.flatMap {it.toList()}}println("拆分后字符:$chars")   //[h, e, l, l, o, w, o, r, l, d]val lists2 = listOf(listOf("hello","java"), listOf("world","php"))val chars2 = lists2.flatMap { it.flatMap { it.toList() } }println("拆分后字符:$chars2")//[h, e, l, l, o, j, a, v, a, w, o, r, l, d, p, h, p]}

运行结果:

image

六,flatMap的例子

代码:

        //处理按钮点击事件binding.button4.setOnClickListener {val sentences = listOf("Kotlin is great","FlatMap is powerful","I love learning Kotlin")val words = sentences.flatMap { it.split(" ") }println("单词列表:$words")}

运行结果:

image

七,flatMap的例子

代码:

        //处理按钮点击事件binding.button5.setOnClickListener {val books = listOf(Book("Kotlin in Action", listOf("Dmitry Jemerov", "Svetlana Isakova")),Book("Effective Java", listOf("Joshua Bloch")),Book("Clean Code", listOf("Robert C. Martin")),Book("Refactoring", listOf("Martin Fowler", "Kent Beck")))val authors = books.flatMap { it.authors }.distinct()println("作者列表:$authors")}

运行结果:

image

http://www.sczhlp.com/news/12983/

相关文章:

  • 镜像制作-dockerfile
  • MobaXterm忘记服务器ssh密码破解方式
  • 陪玩app开发,纯c实现tcp协议 - 云豹科技
  • C# 程序自我删除
  • 陪玩系统开发,Python 中几种属性访问的区别 - 云豹科技
  • Mc
  • 大模型备案全网最详细流程解读(附附件+重点解读)
  • 8.15 总结
  • Odoo18 对接 Xero
  • 游戏陪玩app开发,对比 C++ 和 Python,谈谈指针与引用 - 云豹科技
  • 深入理解指针3
  • 【学习笔记】树上启发式合并
  • 全国各省两位编码对应表
  • 【新品】H7-TOOL的250M示波器模组性能系统测试,mV级噪声,200K存储深度,支持USB,局域网和外网,支持和其它各种功能同时使用
  • ESP32-S3 控制 步进电机
  • 游戏陪玩系统源码,Python 强大的信号库 blinker 入门教程 - 云豹科技
  • ESP32-S3 控制 直流电机
  • 集成电路制造类EDA有哪些?供应商有哪些?
  • 插入 dp
  • 同声翻译工具
  • 利用Linux扩展文件属性隐藏恶意负载的技术分析
  • centos7下安装docker教程
  • 七天零基础学java(第七天)--mysql+jbdc
  • H5客服系统开发实现
  • 41. 缺失的第一个正数
  • ESP32-S3 控制 按键
  • SQLSERVER开窗函数
  • 某中心获计算语言学会议最佳论文奖
  • PyCharm下载安装教程(附安装包和激活教程)PyCharm保姆级安装教程
  • ESP32-S3 控制 继电器