26 scala 学习

26 scala 学习比较

更多干货

Type 与 Class

import scala.reflect.runtime.universe._


class Spark

trait Hadoop

object Flink

class Java {

  class Scala

}

object Type_Advanced {

  def main(args: Array[String]) {
    println(typeOf[Spark])
    println(classOf[Spark]) //Class[_ <: Spark]


    val spark = new Spark

    println(classOf[Hadoop])
    println(typeOf[Hadoop])

    println(Flink.getClass)
    //    println(classOf[Flink])

    val java1 = new Java
    val java2 = new Java
    val scala1 = new java1.Scala
    val scala2 = new java2.Scala
    println(scala1.getClass)
    println(scala2.getClass)
    println(typeOf[java1.Scala] == typeOf[java2.Scala])
    println(typeOf[java1.Scala])
    println(typeOf[java2.Scala])

    println(classOf[List[Int]] == classOf[List[String]])
    println(typeOf[List[Int]] == typeOf[List[String]])

  }

}

Type

this.type 与实例绑定

import scala.reflect.runtime.universe._

object Scala

class Java1

class JVM {
  def method1: this.type = this
}

class JVM_Language extends JVM {
  def method2: this.type = this
}

object Singleton_Type {

  def main(args: Array[String]) {
    println(Scala.getClass)
    println(typeOf[Scala.type])

    val java = new Java1
    val java2 = new Java1
    println(typeOf[java.type])
    println(typeOf[java2.type])
    val content: java.type = java
    //    val content:java.type = java2

    val jvm = new JVM_Language
    println(jvm.method1)
    jvm.method1.method2
  }

}

List 中 ::

中值表达式

 def ::[B >: A] (x: B): List[B] =
    new scala.collection.immutable.::(x, this)

以上的语法 表示 A 和B 有相同父类就可以做拼接

abstract class Big_Data

class Hadoop extends Big_Data

class Spark extends Big_Data

object List_Constructor_Internals {

  def main(args: Array[String]) {
    val hadoop = new Hadoop :: Nil
    val big_Data = new Spark :: hadoop
  }

}

ListBuffer

object ListBuffer_Internals {

  def main(args: Array[String]) {
    val list = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
    increment(list)
    increment_MoreEffective(list)
    increment_MostEffective(list)
  }

  def increment(list: List[Int]): List[Int] = list match {
    case List() => List()
    case head :: tail => head + 1 :: increment(tail)
  }

  def increment_MoreEffective(list: List[Int]): List[Int] = {
    var result = List[Int]()
    for (element <- list) result = result ::: List(element + 1)
    result
  }

  def increment_MostEffective(list: List[Int]): List[Int] = {
    import scala.collection.mutable.ListBuffer
    var buffer = new ListBuffer[Int]
    for (element <- list) buffer += element + 1
    buffer.toList
  }

}

for

object ForInAction {

  def main(args: Array[String]) {
    val lauren = Person("Lauren", false)
    val rocky = Person("Rocky", true)
    val vivian = Person("Vivian", false, lauren, rocky)
    val persons = List(lauren, rocky, vivian)
    //生成器 定义 过滤器 处理
    val forResult = for {person <- persons; name = person.name; if !person.isMale; child <- person.children}
      yield (person.name, child.name)
    println(forResult)

    val content = for (x <- List(1, 2, 3); y <- List("Hadoop", "Spark", "Flink")) yield (x, y)
    println(content)
  }

}

for query

case class Book(title: String, authors: List[String])

object For_Query {

  def main(args: Array[String]) {
    val books: List[Book] = List(
      Book("Structure and Interpretation ", List("Abelson , Harold", "Sussman")),
      Book("Principles of Compiler Design",
        List("Aho, Alfred", "Ullman, Jeffrey")),
      Book("Programming in Modula-2", List("Wirth, Niklaus")),
      Book("Introduction to Functional Programming", List("Bird, Richard")),
      Book("The Java Language Specification",
        List("Gosling, James", "Joy, Bill", "Steele, Guy", "Bracha, Gilad")))

    //    val result = for(b <- books ; a <- b.authors if a startsWith "Gosling") yield b.title
    val result = for (b <- books if (b.title indexOf "Programming") >= 0) yield b.title
    println(result)
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值