iterator

24 阅读2分钟
package caseclass

object classClass01 {
  // Set是可以去重的
  // 创建一些对象,把他们装入Set,看看是否能去重!

  class Stu(var name:String, var age:Int) {
    override def equals(obj: Any): Boolean = {
      val other = obj.asInstanceOf[Stu]
      other.age == age && other.name == name
    }

    override def toString: String = s"Stu($name, $age)"
  }

  def main(args: Array[String]): Unit = {
    val stu1 = new Stu("小花", 18)
    val stu2 = new Stu("小花", 18)

    println(stu1)

    println(stu1 == stu2)

    val set1 = Set(stu1, stu2)
    println(set1)
  }
}
object classClass02 {
  /**
   * case class
   * 样例类,相比与普通的类,它有三点不同
   * 1. 在创建对象时,可以省略 new
   * 2. 默认情况下,属性都是只读的
   * 3. 自己自动添加相关的equals, tostring 等方法
   * 特别适合用来描述数据。
   **/
  case class Stu(name:String, age:Int)

  def main(args: Array[String]): Unit = {
    val stu1 = Stu("小花", 18)
    // 2. 默认情况下,属性都是只读的
    // stu1.age = 19
    // stu1.name = "xxx"

    val stu2 = Stu("小花", 18)

    println(stu1)

    println(stu1 == stu2)

    val set1 = Set(stu1, stu2)
    println(set1)
  }
}
object classClass03 {
  // 1
  case class Book(id:String, bookName:String, author:String, price:Double)

  def main(args: Array[String]): Unit = {
    val book1 = Book("001", "高效能人士的七个习惯", "韦伯", 50)
    val book2 = Book("002", "沉思录", "皇帝", 20)
    val book3 = Book("003", "自控力", "xx", 30)
    // 2, 3
    val bookList = scala.collection.mutable.ListBuffer(book1, book2, book3)

    val book4 = Book("004", "高效能人士的七个习惯", "韦伯", 50)
    // 4,5
    if(addNewBook(bookList, book4)){
      println("添加成功")
    } else {
      println("图书已经存在,添加失败")
    }

    // 10
    bookList.foreach(ele => {
      println(s"书名:《${ele.bookName}》")
      println(s"作者: ${ele.author}")
      println()
    })
  }

  // 检查书是否存在
  def addNewBook(bookList: scala.collection.mutable.ListBuffer[Book], book: Book): Boolean = {
    if(bookList.exists(_.id == book.id)){
      false
    } else {
      bookList += book
      true
    }
  }
}
package iterator

object iterator01 {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4, 5)
    // 如何依次输出这5个元素?
    list.foreach(ele => println(ele))

    // 问: 如何只输出: 3,4
    val it = list.iterator.drop(2).take(2)
    while(it.hasNext){
      println(it.next())
    }
  }
}
package iterator

object iterator03 {
  /**
   * 1. next() 获取当前的元素, 移动一次迭代器
   * 2. hasNext 判断是否有下一个元素
   * 3. drop(n) 从当前位置开始, 跳过 n 个元素, 它返回一个新的迭代器
   * 4. take(n) 从当前位置开始, 取n个元素, 它返回一个新的迭代器
   * 5. duplicate 复制迭代器
   * 6. toList 把迭代器中剩余的元素放在一个新的List中
   * 7. zip 把两个迭代器合并成一个新的迭代器,可以同时移动这个新的迭代器, 并且可以同时
   */
  def main(args: Array[String]): Unit = {
    // val it = List(1,2,3,4,5).iterator
    // it.next()
    // it.next()
    // val list1 = it.toList
    // println(list1)

    val it1 = List(1,2,3,4,5,6).iterator
    val it2 = List("one", "two", "three", "four", "five").iterator

    val it3 = it1.zip(it2)

    while(it3.hasNext){
      val rs = it3.next()
      println(rs._1, rs._2)
    }
  }
}