Scala-列表操作

package com.bigdata

object ListO {
  def main(args: Array[String]): Unit = {
    println()
  }

  val list = List(1,2,3,4)
  for (i <- list) println(i)
  //添加元素
  val list1 = 0::list
  for (i <- list1) println(i)
  //合并list
  val list2 = List("x","y","z")
  val list3 = list ::: list2
  for (i <- list3) println(i)

  println(list.head) // 返回第一个元素
  println(list.tail) // 返回除第一个元素的List
  println(list.isEmpty) // 判断List是否为空

  // filter高阶函数:他的参数就是一个匿名函数,匿名参数输入参数x就代表的是列表中的一个元素,
  // filter会遍历列表中的每个元素,每个元素就去套用传进来的匿名函数的判断条件,如果判断为true就保留这个元素
  val list4 = list.filter(x => x%2 == 0) // 取出List中的偶数;
  val list5 = list.filter(_ %2 ==0) // filter简写
  println(list4)
  println(list5)

  val str = "123 hello scala 168" // 过滤字符串中的数字
  val f = str.toList.filter(x => Character.isDigit(x))
  println(f)

  val g = str.toList.takeWhile(x => x != 's') // 取到某个字符之前的所有字符
  println(g)

  val h = list2.map(x => x.toUpperCase()) // map高阶函数:将每个元素进行转换映射
  val h1 = list2.map(_.toUpperCase()) // map简写
  println(h,h1)

  val k = list.filter(_ % 2 ==0).map(_ +100) // 取出列表中的偶数,并且为每个元素加上100
  println(k)

  val q = List(list,List(4,5,6)) // 两层List
  val r = q.map(x => x.filter(y => y % 2 == 0 )) // 取出q中的所有偶数;第一步:map获取每个list,第二步:filter过滤每个list中的偶数元素
  val r1 = q.map(_.filter(_ % 2 ==0)) // 简写
  println(r)
  println(r1)

  val p = q.flatMap(_.filter(_ % 2 == 0)) // flatMap高阶函数:是将List中的结果打平
  println(p)

  // 总结map与flatMap区别
  // map:返回的结果和原List结构一致,如果是两层,返回的就是两层;r: List[List[Int]] = List(List(2,4), List(4, 6))
  // flatMap:返回的结果只有一层List结构; p: List[Int] = List(2, 4, 4, 6)

  // 规约操作:reduceLeft(op:(T,T) => T)
  val m = list.reduceLeft((x,y) => x + y) // 求List中元素的和
  val m1 = list.reduceLeft(_ + _) // reduceLeft简写
  println(m)
  println(m1)

  // 规约操作:foldLeft(z:U)(op:(U,T)) => U
  val n = list.foldLeft(0) ((x,y) => x+y) // 求List中元素的和
  val n1 = list.foldLeft(0)(_+_) // 简写
  println(n)
  println(n1)


}

 

posted @ 2019-02-14 14:39  时光快照  阅读(260)  评论(0编辑  收藏  举报