快学Scala8-Collection

作者: Codlife | 来源:发表于2016-08-14 19:48 被阅读0次

参考文献:《快学Scala》第13章

package learn

import breeze.numerics.pow

import scala.collection.mutable.LinkedList

/**
  * Created by wjf on 2016/8/14.
  */
object TestList {
  def main(args: Array[String]): Unit = {
    /*
    * 在Scala 中,列表要么是Nil,要么是一个head元素加一个tail,而tail有事一个列表*/
    val digits = List(4, 2)
    digits.head //4
    digits.tail // List(2)
    digits.tail.head //2
    digits.tail.tail // Nil
    // :: 操作符从给定的头和尾创见一个新的列表
    9 :: List(3, 1)
    9 :: 3 :: 1 :: Nil
    // 计算求和 ,模式匹配版本
    def sum(lst: List[Int]): Int = lst match {
      case Nil => 0
      case h :: t => h + sum(t)
    }
    // 递归版,递归之所以那么自然,是因为列表的尾部正好又是一个列表
    def sum2(lst: List[Int]): Int = {
      if (lst == Nil) 0
      else lst.head + sum(lst.tail)
    }

    // 可变列表
    val lst = LinkedList(1, -2, -3)
    var cru = lst
    while (cru != Nil) {
      if (cru.elem < 0) cru.elem = 0
      cru = cru.next
    }
    // 各一个元素删除一个元素
    while (cru != Nil && cru.next != Nil) {
      cru.next = cru.next.next
      cru = cru.next
    }
    println(lst.elem)
    //    lst.next=Nil
    lst.next = LinkedList.empty
    println(lst.elem)
    println(lst.next.elem)

    // flatMap 将结果串接在一起
    val s = List("wjf", "csm")
    def ulcase(t: String) = Vector(t.toUpperCase(), t.toLowerCase())
    s.map(ulcase).foreach(println)
    s.flatMap(ulcase).foreach(println)

    // colect 方法用于偏函数,那些并没有对所有可能输入值进行定义的函数,它产出的所有参数的函数值的集合,例如
    "-3+4".collect { case '+' => 1; case '-' => -1 }.foreach(println)

    // scanLeft scanRight
    (1 to 10).scanLeft(0)(_ + _).foreach(println)

    //拉链操作 zip 得到一个对偶
    val prices = List(1, 2, 3)
    val quantities = List(1, 2, 3)
    prices zip quantities map (p => p._1 * p._2) foreach (println)
    // zipALl 制定缺省值
    List(1, 2, 3) zipAll(List(1, 2), 0.0, 1) foreach (println)

    // 懒视图,应用view 方法来得到类似的效果,该方法产生一个方法总是被懒执行的集合 }
    val powers = (0 until 1000).view.map(pow(10, _)) // 将产生一个未被求值得集合,
    // 当你计算 pow(10,100)时,其他值得幂并没有被计算,和流不同,这些视图并不会缓存任何值,
    // 懒集合的好处,看下面的例子
    //    (0 to 1000).map(pow(10, _)).map(1 / _)
    //(0 to 1000).view.map(pow(10, _)).map(1 / _).force
    // 第二个例子,当求知动作被强制执行时,对于每个元素,这两个操作被同时执行,不需要额外的中间集合

    // 流 对象
    def numsFrom(n: BigInt): Stream[BigInt] = n #:: numsFrom(n + 1)
    val tenOrMore = numsFrom(10)
//    tenOrMore.force
    println(tenOrMore)

    // 并行集合,Scala 提供了用于操纵大型集合任务的诱人的解决方案,这些任务通常可以很自然的并行操作。
    // 举例来讲:要计算所有元素只和,多个线程可以并发的计算不通区域的和;在最后,把结果汇总起来
    for( i <-( 0 until 100).par) print( i + " ")

    var array=for(i  <- (0 until 100).par) yield i + " "
    array.foreach(println)

  }

}

相关文章

  • 快学Scala8-Collection

    参考文献:《快学Scala》第13章

  • 快学 女神

    三天背三年的英语单词; 三天学三年的初中语法; 三天背三年的高中单词。 你们相信吗?绝对不会相信,...

  • 神奇快学

    你见到三天背会三年的单词吗? 你相信十分能扫三年的单词吗? 你知道初中能学高中的单词吗? ...

  • 微课:快学、快用、快设计

    《微课:快学、快用、快设计》作者唐绪莹,熊洁。本书作者基于其微课开发的实践和对海量案例的研究,提供了一套有效的微课...

  • less学习,快学快用!

    第一次在简书上写博客,这也是我的第一篇博客! less我应该是css的升级版了哈 _...好处懂的自然懂!less...

  • 学的快还是忘的快

    先看问题 你或许有这样的困惑,面对层出不穷的技术,学过的东西总是很快就会忘记,这究竟是为什么?有没有什么办法能改变...

  • 怎样学东西快?

    怎样学东西学得快? 1.学习任何东西,最快的方法就是讲给别人。学一点,就讲一点。 2.尽量用最简洁、最土的话,来表...

  • 《快学Scala》——基础

    声明值和变量 用val定义的值实际上是常量。用var定义的值是变量。在scala中鼓励使用val。不需要给出值或变...

  • 《快学Scala》——类

    简单类和无参方法 Scala类最简单的形式看上去和Java或C++相似: 注:在Scala中类并不声明为publi...

  • 《快学Scala》——继承

    扩展类 Scala扩展类的方式和Java一样也是使用extends关键字。和Java一样,你在定义中给出子类需要而...

网友评论

    本文标题:快学Scala8-Collection

    本文链接:https://www.haomeiwen.com/subject/gknysttx.html