详解scala中flatmap和map的区别

这篇博客详细解释了Scala中flatMap和map的区别。在处理集合时,map函数会保持内部列表结构,而flatMap则会扁平化结果,将所有元素置于同一层次。通过示例展示了在处理人及其朋友关系时,如何使用这两个函数得到不同的输出结果。
摘要由CSDN通过智能技术生成

FlatMap函数有一般的功能和map函数函数一样,就是经过map函数之后多了一个扁平化的过程。不过有个要求,传入的函数在处理完后返回值必须是List(或Seq),如果结果不是List(Seq),那么将出错。也就是说,传入的函数是有要求的 —— 返回值是Seq才行。这样,每个元素处理后返回一个List,我们得到一个包含List元素的List,flatMap自动将所有的内部list的元素取出来构成一个List返回。

/**
    * 定义一个人对象
    * @param name       人名
    * @param friends    朋友们
    */
  class people(val name: String, val friends: Seq[String])
  def main(args: Array[String]) {
    // 创建2个人
    val p1 = new people("小红", Seq("朋友1", "朋友2", "朋友3"));
    val p2 = new people("小明", Seq("朋友3", "朋友4", "朋友5"));
    // 加入到序列中
    val seqs = Seq[people](p1, p2)


   

做对比:map的方式:
    val c = seqs.map(
      f => f.friends
    )
    println(c)

flatmap的方式:
     /** 然而有些时候, 你并不希望得到这么一个需要访问两层才能拿到朋友对象的序列.
      * 有时, 你希望得到的是一个在第一层就能访问到朋友的序列. 这就需要 flatMap:
      */
    // flatMap
    val d = seqs.flatMap(
      f => f.friends
    )
    println("flatMap的形式")
    println(d)
  }
}
输出结果
map的形式
List(List(朋友1, 朋友2, 朋友3), List(朋友3, 朋友4, 朋友5))
flatMap的形式
List(朋友1, 朋友2, 朋友3, 朋友3, 朋友4, 朋友5)

 

说的明白一点就是map处理完之后会有小List

flatmap处理完之后,把这些小list拍平了,小list里面所有的元素组成了一个list

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值