Scala flatMap和map

半兽人 发表于: 2016-06-22   最后更新时间: 2016-06-22 11:40:54  
{{totalSubscript}} 订阅, 5,039 游览

Scala flatMap和map

flatMap函数的一半功能和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)

    println("map的形式")
    val c = seqs.map(
      f => f.friends
    )
    println(c)

     /** 然而有些时候, 你并不希望得到这么一个需要访问两层才能拿到朋友对象的序列.
      * 有时, 你希望得到的是一个在第一层就能访问到朋友的序列. 这就需要 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)
更新于 2016-06-22

查看scala更多相关的文章或提一个关于scala的问题,也可以与我们一起分享文章