zoukankan      html  css  js  c++  java
  • scala学习手记37

    这次统一看一下scala中容器类的几个方法。

    Set

    filter()方法

    filter()方法用来从Set中过滤获取含有指定特征的元素。示例代码如下:

    val colors1 = Set("Blue", "Green", "Red", "yellow")
    val filteredSet = colors1 filter (_ contains "l")
    println(filteredSet mkString ",")

    上面的代码从一个Set中过滤出了含有字符“l”的元素,而后调用mkString方法将过滤结果拼接打印出来。看一下结果:

    image

    ++()方法

    ++()方法用来拼接两个Set。示例代码如下:

    val colors1 = Set("Blue", "Green", "Red", "yellow")
    val colors2 = Set("White", "Black")
    
    val combinedSet = colors1 ++ colors2
    println(combinedSet mkString ",")

    很简单的程序,看一下结果:

    image

    **()方法

    **()方法用来找出两个Set的并集(教材上说的是交集,有误)。示例代码如下:

    val colors1 = Set("Blue", "Green", "Red", "yellow")
    val colors2 = Set("White", "Black", "Red")
    
    val uniondSet = colors1 ++ colors2
    println(unionSet mkString ",")

    执行结果:

    image

    map()方法

    map()方法可以对Set的每个元素执行操作,最后返回的是一个新的集合。示例代码如下:

    val colors1 = Set("Blue", "Green", "Red", "yellow")
    
    val colorSet = colors1 map ("color is : " + _)
    
    colorSet foreach {
      println(_)
    }

    这里打印Set元素时使用了内置的迭代器foreach。执行结果:

    image

    Map

    filterKeys()方法

    filterKeys()方法用来对Map的key进行过滤,示例代码如下:

    val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
    val filteredMap = roster filterKeys (_ contains ("Jac"))
    println("Filtered Size : " + filteredMap.size)

    执行结果如下:

    image

    filter()方法

    也可以使用filter()方法来执行过滤,不过filter()方法中的函数值操作的对象是Key-Value对。看一下代码:

    val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
    val filteredMap = roster filter {
      ele => val (k, v) = ele 
        k contains ("Jac")
    }
    println("Filtered Size : " + filteredMap.size)

    get()方法

    get()方法用来从Map中取值,不过返回值的类型是Optional[T],示例代码如下:

    val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
    println("Jack" +  " is a " + (roster get "Jack").get )

    说实话,我不太喜欢Optional,还好scala不需要让我忍受这个东西,它还提供了另一种更简洁的获取kv对的方式:

    val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
    println("Jack" +  " is a " + roster("Jack") )

    在上面的代码里我们直接在Map对象后面使用了一个括号来取值。前面曾提到过,这是使用了Map的一个工厂方法apply。

    update()方法

    update()方法可以用来“更新”Map对象。因为我们用的Map是一个不变的类的对象,它的“更新”并不会影响之前的对象,它会返回一个新的对象。

    val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
    val updatedRoster = roster.updated("Jane", "Nurse")
    println("Jane" +  " is a " + roster("Jane") )
    println("Jane" +  " is a " + updatedRoster("Jane") )

    执行结果如下:

    image

    List

    在scala中Set和Map都有可变和不变两种实现,但是List只有不变的实现。scala中的List实现有些类似于java的LinkedList。scala的List的大部分操作都是围绕head和tail执行的。

    如下是一个List使用的示例,我们要访问List示例的第一个元素可以使用list.head()方法也可以直接执行list(0):

    val list1 = List("Red", "Yellow", "Blue")
    println(list1.head)
    println(list1(0))

    执行结果是:

    image

    ::()方法

    这个方法用于在List前添加元素。a :: list可以读作“在List前添加a”。示例代码如下:

    val list1 = List("Red", "Yellow", "Blue")
    val list2 = "Black"::list1
    println(list1.mkString(","))
    println(list2.mkString(","))

    执行结果如下:

    image

    :::()方法

    这个方法用于将一个List实例添加到另一个List实例前面。list ::: listA可以读作“在listA前添加list”。示例代码如下:

    val list1 = List("Red", "Yellow", "Blue")
    val list2 = "Black"::list1
    val combinedList = list2:::list1
    println(list1.mkString(","))
    println(list2.mkString(","))
    println(combinedList.mkString(","))

    执行结果如下:

    image

    请注意:以上两个List的方法操作对象都是操作符后的List实例。

    forall()和exists()

    用forall()方法可以检查是否所有元素都满足某一特定条件。而想了解是否存在某些元素满足特定条件,可以用exists()。示例代码如下:

    val list1 = List("Red", "Yellow", "Blue")
    println(list1 forall (_ contains ("R")))
    println(list1 exists (_ contains ("R")))

    执行结果如下:

    image

    此外还有map()方法、foldLeft()、foldRight()方法等,前面也都提到过。今天我不想再继续了。

    就这样!

    ########

  • 相关阅读:
    demo2.css
    less的嵌套
    ddd.css
    LESS自学
    vue.js过滤器 “|”
    v-if,v-else数据绑定
    v-for基本用法
    在spring中使用JdbcTemplate进行数据库管理操作
    2013第四届蓝桥杯JavaB组省赛 第一题:世纪末的星期
    PTA L1-049 天梯赛座位分配 (20分)
  • 原文地址:https://www.cnblogs.com/amunote/p/5869979.html
Copyright © 2011-2022 走看看