zoukankan      html  css  js  c++  java
  • Scala 中 for 循环 和 generator 的使用例子

    这个例子是,从每个list中,找到age最大的那个node。

    class Node(vName: String, vAge: Int) {
      // Entity class
      var name: String = vName
      var age: Int = vAge
    }
    
    object TestGenerator {
    
      def main(args: Array[String]): Unit = {
        test()
      }
    
      def test(): Unit = {
        // This test case is to find out the max age node from each node's list
    
        // First, define the node 1,2,3
        val node1 = new Node("name-1", 1)
        val node2 = new Node("name-2", 2)
        val node3 = new Node("name-3", 3)
    
        // Second, def some List containing nodes
        val list1: List[Node] = List(node1, node2, node3)
        val list2: List[Node] = List(node1)
        val list3: List[Node] = List(node1, node2)
        val list4: List[Node] = List()
        val list5: List[Node] = Nil
        val list6: List[Node] = null
    
    
        // ==== Test Case 1 ====
        // In this test, the generator excluded the Nil and List() and null, and take the "node" out of headOption" which is Option[Node]
        // The returns are collected into node as Node
    
        val allList: Seq[List[Node]] = Seq(list1, list2, list3, list4, list5, list6)
    
        val result1 = for {
          list: List[Node] <- allList // The type List[Node] is necessary for this situation, it can help to filter out list6 (null)
          node <- list.sortWith(_.age > _.age).headOption
        } yield node
    
        for (r <- result1) {
          println(r.name)
        }
    
        println("======================================================")
    
        // *****************************************************************************
    
        // ==== Test Case 2 ====
        // In this test, use get() function to get back the list instead of Seq[List[Node]]
    
        def get(i: Int): List[Node] = {
          i match {
            case 1 => list1;
            case 2 => list2;
            case 3 => list3;
            case 4 => list4;
            case 5 => list5;
            case 6 => list6;
          }
        }
    
        // Define the array to contain the test lists
        // List 1-5 will be used for this test, but list6 (null) cannot be handled in this approach
        val arr = List(1, 2, 3, 4, 5) // list6 (null) cannot be handled thus only 1-5 here
    
        val result2 = for {
          i <- arr
          node <- get(i).sortWith(_.age > _.age).headOption
        } yield node
    
        for (r <- result2) {
          println(r.name)
        }
    
      }
    }
  • 相关阅读:
    小程序自定义日历组件
    uni-app 区分环境
    uniapp开发微信小程序获取用户手机号
    flex布局中子元素宽度失效的问题
    使用 VSCode 创建 SpringBoot RESTful 增删改查接口项目并发布
    [译] 如何使用 WebGL 技术进行风力地图可视化
    Cesium Primitive API 实践:绘制一个三角形
    ArcPy 输出路径神坑:不能有短横线
    【问题记录】本地没有更新远程仓库的jar包
    k8s 的pod按照时间排序
  • 原文地址:https://www.cnblogs.com/pekkle/p/9149957.html
Copyright © 2011-2022 走看看