函数式编程练习之常用方法

package day02

/**
  * 函数编程练习之常用方法
  * reduce
  * fold
  * aggregate
  * 交并差集
  */
object Exercise {
  def main(args: Array[String]): Unit = {

    // 创建一个List
    val list0 = List(5,7,1,9,3,8,6,2,0,4)

    //将lst0中每个元素乘以2后生成一个新的集合
    val list1 = list0.map(_ * 2)

    //将lst0中的偶数取出来生成一个新的集合
    val list2 = list0.filter(_ % 2 == 0)

    //将lst0排序后生成一个新的集合
    val list3 = list0.sorted

    //反转排序顺序
    val list4 = list3.reverse

    //将lst0中的元素4个一组,类型为Iterator[List[Int]]
    val it = list0.grouped(4)

    //将Iterator转换成list
    val list5 = it.toList

    //将多个list压扁成一个list
    val list6 = list5.flatten

    val lines = List("hello java hello scala","hello scala","hello python")
    //先按空格切分,再压平
//    val words = lines.map(_.split(" "))
//    val flatWords = words.flatten
//    val res = lines.flatMap(_.split(" "))

    //并行计算求和
    val arr = Array(1,2,3,4,5,6,7,8,9,10)
//和线程有关,每个线程计算一部分,( (1+2+3+4) + (5+6+7+8) +(9+10) )
//    val res = arr.sum
//    val res = arr.par.sum

    //按照特定的顺序进行聚合
    // (((1+2)+3)+4)+5....
//    val res = arr.reduce(_+_)
//    val res = arr.reduceLeft(_+_)
      // 实现并行方式进行聚合
//    val res = arr.par.reduce(_+_)
//    val res = arr.par.reduce(_-_)

    //折叠,有初始值(无特定顺序)
//    val res = arr.par.fold(10)(_+_)

    //折叠,有初始值(有特定顺序)
//    val res = arr.foldLeft(10)(_+_)
//    val res = arr.foldRight(10)(_+_)
//    val res = arr.foldLeft(10)(_-_)
//    val res = arr.par.foldLeft(10)(_-_)

    //聚合
    val list7 = List(List(1,2,3),List(3,4,5),List(2),List(0))
//    val res = list7.flatten.reduce(_+_)
//    val res = list7.aggregate(0)(_+_.sum,_+_)

    val l1 = List(5,6,4,7)
    val l2 = List(1,2,3,4)
    //求并集
//    val res = l1 union l2

    //求交集
//    val res = l1 intersect l2
    //求差集
    val res = l1 diff l2
    println(res)

  }
}

你可能感兴趣的:(函数式编程练习之常用方法)