48_集合_高级函数(filter、map、flatten、flatMap、group、reudce、fold)
/*
* 集合的高级计算(filter、map、flatten、flatMap、group、reudce、fold)
* 说明
* 1.map的元素类型为 二元元组 tp:(Any,Any)
* 2.map没有排序函数,如果排序,需要先转成list
* 1. 过滤
* 遍历集合并从中获取满足指定条件的元组,返回一个新集合
* 2. 转化/映射(map)
* 将集合中的每一个元素映射到指定函数
* map的元素类型是二元元组
* 3. 扁平化
* 将多个集合(多级嵌套)打散,合并成一个新集合
* 4. 扁平化+映射
* 5. 分组(group)
* 将元素按照传入的规则计算,计算结果为key,符合规则的结果存储到list为value,返回map
* 6. 简化(归约) - reduce
* 按照指定的规则,对集合内的元素进行聚合,从而减少数据,返回结果
* reduce = reduceLeft
* reduceRight
* fold方法
*
* */
/* * 集合的高级计算(filter、map、flatten、flatMap、group、reudce、fold) * 说明 * 1.map的元素类型为 二元元组 tp:(Any,Any) * 2.map没有排序函数,如果排序,需要先转成list * 1. 过滤 * 遍历集合并从中获取满足指定条件的元组,返回一个新集合 * 2. 转化/映射(map) * 将集合中的每一个元素映射到指定函数 * map的元素类型是二元元组 * 3. 扁平化 * 将多个集合(多级嵌套)打散,合并成一个新集合 * 4. 扁平化+映射 * 5. 分组(group) * 将元素按照传入的规则计算,计算结果为key,符合规则的结果存储到list为value,返回map * 6. 简化(归约) - reduce * 按照指定的规则,对集合内的元素进行聚合,从而减少数据,返回结果 * reduce = reduceLeft * reduceRight * fold方法 * * */ object AdvanceCalculate extends App { //初始化 var list = List(1, 2, 3, 4, 5, 6, 7, 8, 9) //1.过滤 - filter //传入过滤规则 var list1 = list.filter(_ % 2 == 0) println(list1) //2.转化/映射(map) //对集合中的每个元素都执行指定的函数,并返回新的集合 var list2 = list.map(x => x * x) println(list2) //3.扁平化 - flatten //将多个集合(多级嵌套)打散,合并成一个新集合 var nestedList: List[List[Int]] = List(List(1), List(2), List(3, 4, 5), List(6, 7, 8)) var list3 = nestedList.flatten println(list3) //4.扁平化+映射 (打散) var wordList: List[String] = List("hellow word", "helllow java", "helllow scala", "hello dawang", "helllo spark") var list4 = wordList.flatMap(x => x.split(" ")) println(list4) //5.分组 //按照首字母分组,首字母为key,符合规则的元素的list为value var list5: Map[String, List[String]] = list4.groupBy(x => x.substring(0, 1)) println(list5) //6.简化(归约) reduce //var list = List(1, 2, 3, 4, 5, 6, 7, 8, 9) //前后两个值的计算规则 (从左往右计算) def add(x: Int, y: Int) = x + y def sub(x: Int, y: Int) = x - y var result = list.reduce(add) var result1 = list.reduce((x, y) => x - y) // (((1 - 2) - 3) -4)-5... var result2 = list.reduceLeft((x, y) => x - y) println(result) println(result1) println(result2) //(从右往左计算) var result3 = list.reduceRight(sub) println(result3) //7.fold方法 = 初始值 + reduce var result4 = list.foldLeft(4)(add) println(result4) var result5 = list.foldRight(4)(sub) println(result5) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界