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)


}
复制代码

 

posted @   学而不思则罔!  阅读(154)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示