zoukankan      html  css  js  c++  java
  • 集合上的函数式编程 示例

    package com.xing.listfile
    
    /**
      * Created by DengNi on 2017/2/12.
      *
      * 1,在Scala的集合体系中Iterable是共同的Trait,Iterable要求继承者实现一些共同的方法,例如对元素的遍历等;
      * 2,Array是一个非常基础的数据结构,不从属于Scala集合的体系;
      * 3,Scala的集合体系中集合分为可变集合与不可变集合之分;不可变的集合在scala.collection.immutable包中,可变
      *      的集合在scala.collection.mutable;
      * 4, List是元素的列表集合,是不可变的:
      *      第一点:List中head是指第一个元素,tail是指剩下的元素构成的List集合;
      *      第二点:使用::这个操作符来把List和其它的元素进行组拼来构建新的List
      *      第三点:如果集合中没有元素的话,此时为Nil,例如说List中只有一个元素,那么head就是这个元素本身,tail操作就会返回Nil
      * 5,LinkedList是元素可变的列表
      * 6, Set是元素不可重复的集合,且元素是无序的;HashSet中的元素可变且不可重复且不能够保证顺序;
      * 7,LinkedHashSet会维护元素的插入顺序;
      * 8, SortedSet会自动的把插入的元素进行排序;
      */
    object Functional_Iterable {
    
      def main(args: Array[String]) {
    
        val range = 1 to 10
        range.foreach(println)
    
        //List 是元素的列表集合,是不可变化的
        // list 中的 head 是第一个元素,tail 是指剩余的除第一个元素外的其他元素构成的构成的list
        //使用:: 这个操作符来把List 和其他的元素进行组合拼接来构成新的List 集合
        //如果结合中没有元素的话,此时为Nil ,例如集合中本身就一个元素,那么head 就是这个元素本身,tail 操作就会返回Nil
    
        val list = List(1,2,3,4,5)
        println(list.head)
        println(list.tail)
        println(0::list)
    
        //val list = 0::list  //list 集合是不可以改变的
    
        //println(list)
    
        // linkedList 是元素可变的列表
        var linkedList = scala.collection.mutable.LinkedList(1,2,3,4,5)
        println(linkedList.elem)
        println(linkedList.tail)
    
        while(linkedList !=Nil){
          println(linkedList.elem)
          linkedList = linkedList.tail
        }
        println(linkedList)
    
        linkedList = linkedList.+:(9)  //这是一个什么样子的集合
        println(linkedList)
    
        val set = Set(1,2,3,4) //set 是不可变元素集合 ,必须用 val
        println(set)
        val setMore = set + 1 //这个set 不会把 1 加上
        println(setMore)
    
        //hashset 是可变集合,但是内容不可重复,且没有顺序
        var hashSet = scala.collection.mutable.HashSet(1,2,3)
         hashSet += 4
        hashSet += 4
         hashSet += 90
        println(hashSet)
    
    
        //LinkedHashSet会维护元素的插入顺序,set 也不允许元素重复
        var linkedHashSet = scala.collection.mutable.LinkedHashSet(1,2,3,4,4)
        linkedHashSet +=12
        print(linkedHashSet)
        //结果不允许有重复数据
        val sortedSet = scala.collection.mutable.SortedSet(1, 2, 3,3, 5, 50, 4)
        println(sortedSet)
    
        println(List[String]("I am into Spark so much","Scala is powerful").flatMap { x => x.split(" ") }.map { x => (x, 1) }.map(x => x._2).reduce(_+_))
        println(List[String]("I am into Spark so much","Scala is powerful").flatMap { x => x.split(" ") }.map {(_, 1) }.map(_._2).reduce(_+_))
        println(List[String]("I am into Spark so much","Scala is powerful").flatMap { x => x.split(" ") }.map {(_, 1) }.map(_._2).reduce((x,y) =>x + y))
    
        List(0,1,2,3,4,5).foreach { x => println(x) }
        List(0,1,2,3,4,5).foreach {println(_) }
        List(0,1,2,3,4,5).foreach {println _ }
        List(0,1,2,3,4,5).foreach {println }
        List(0,1,2,3,4,5).foreach (println)
    
      }
    
    }
    
    

  • 相关阅读:
    等值首尾和2012年12月27日
    求质数2012年12月29日
    动态规划之最长公共子序列2012年12月22日,23日
    两数组最短距离2012年12月26日
    支配值数目2012年12月25日
    等值数目2012年12月26日
    最长平台问题(递归算法)2012年12月25日
    最长平台问题2012年12月24日
    筛法求质数2012年12月30日
    线性筛法2013年1月2日
  • 原文地址:https://www.cnblogs.com/TendToBigData/p/10501286.html
Copyright © 2011-2022 走看看