集合的衍生操作
* 1. 获取集合的head
* 2. 获取集合的tail(返回去掉head节点的集合)
* 3. 获取集合最后一个数据
* 4. 获取集合初始元素(不包含最后一个)
* 5. 集合反转
* 6. 获取前(后)n个元素
* 7. 去掉前(后)n个元素
* 8. 并集
* 9. 交集
* 10. 差集
* 11. 拉链
* 说明
* 1. 相同位置上的元素组成 2元元组,返回2元元组的List
* 2. 如果两个集合元素个数不同,那么会将同等数量的数据进行拉链,多余的省略不用
* 12. 滑窗
* 说明
* 1 2 3 4 5 6
* 窗口内元素:2 步长:1
* 返回 1-2 2-3 3-4 4-5 5-6
* */
/*
*  集合的衍生操作
*     1. 获取集合的head
*     2. 获取集合的tail(返回去掉head节点的集合)
*     3. 获取集合最后一个数据
*     4. 获取集合初始元素(不包含最后一个)
*     5. 集合反转
*     6. 获取前(后)n个元素
*     7. 去掉前(后)n个元素
*     8. 并集
*     9. 交集
*     10. 差集
*     11. 拉链
*         说明
*            1. 相同位置上的元素组成 2元元组,返回2元元组的List
*            2. 如果两个集合元素个数不同,那么会将同等数量的数据进行拉链,多余的省略不用
*     12. 滑窗
*         说明
*            1 2 3 4 5 6
*            窗口内元素:2 步长:1
*            返回 1-2 2-3 3-4 4-5 5-6
* */
object TestList extends App {
  // 初始化
  var list1 = List(1, 2, 3, 4, 5)
  var list2 = List(4, 5, 6, 7, 8)

  //1. 获取集合的head
  println("list1-head:%d", list1.head)
  println("list2-head:%d", list2.head)

  //2. 获取集合的tail(返回去掉head节点的集合)
  println(list1.tail)
  println(list2.tail)

  //3. 获取集合最后一个数据
  println(list1.last)
  println(list2.last)

  //4. 获取集合初始元素(不包含最后一个)
  println(list1.init)
  println(list2.init)

  //5.集合反转
  println(list1.reverse)
  println(list2.reverse)

  //6.获取前(后)n个元素
  println(list1.take(3)) //
  println(list2.takeRight(3)) ////7.去掉前(后)n个元素
  println(list1.drop(3)) //
  println(list2.dropRight(3)) ////8.并集
  var list3 = list1.concat(list2)
  var list4 = list1.union(list2) //底层调concat方法
  println(list3)
  println(list4)

  //9.交集 - intersection
  var list5 = list1.intersect(list2)
  println(list5)

  //10.差集 - difference
  var list6 = list1.diff(list2)
  println(list6)

  //11.拉链 - zipper
  var list7: List[(Int, Int)] = list1.zip(list2)
  println(list7)

  //12.滑窗 - Sliding window
  var list8 = list1.sliding(2) //指定窗口内元素个数,滑动步长默认为1
  var list9 = list1.sliding(2, 2) //指定窗口内元素个数,指定步长为2
  println(list8.mkString("-"))
  println(list9.mkString("-"))
}