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)
}
}
}
Scala 中 for 循环 和 generator 的使用例子的更多相关文章
- scala学习手记2 - scala中的循环
先来看一段Java中的循环: for (int i = 1; i < 4; i++) { System.out.print(i + ","); } 毫无疑问,scala可以让 ...
- scala中停止循环的三种方式
1:使用return关键字 object BreakLoop { //1.使用return关键字 def add():Unit= { for(i <- 1 to 10){ if(i==7){ / ...
- Scala 中使用 akka system 的 scheduler 的例子
这是在scala控制台直接执行的例子. import akka.actor._ import scala.concurrent.duration._ import scala.concurrent ...
- Scala中的If判断&While&For循环
If 判断: object TestScalaIf { def main(args: Array[String]): Unit = { // val resutlt = judge1(-100) // ...
- Scala 中的函数式编程基础(一)
主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. ...
- scala中的call-by-name和call-by-value
http://www.jianshu.com/p/93eefcb61d4f val和def的区别 在scala中,可以用val和def前缀来定义变量,例如: val x = 1 def y = &qu ...
- Scala中 object 和 class的区别
object 在scala中没有静态方法和静态字段,所以在scala中可以用object来实现这些功能,直接用对象名调用的方法都是采用这种实现方式,例如Array.toString.对象的构造器在第一 ...
- Programming In Scala笔记-第七章、Scala中的控制结构
所谓的内建控制结构是指编程语言中可以使用的一些代码控制语法,如Scala中的if, while, for, try, match, 以及函数调用等.需要注意的是,Scala几乎所有的内建控制结构都会返 ...
- scala中option、None、some对象
转载:http://www.jianshu.com/p/95896d06a94d 1.option类型避免对象是空值,造成空指针异常. 2.None对象表示null,在没有对象返回时使用,some在有 ...
随机推荐
- 360 安全卫士 for Linux 使用结果
测试了一把,结果显示360基本对Linux社区规范和安全常识不give a fuck. 胡乱打包 首先,这个deb包就是胡乱打包,依赖关系就没弄好: $ dpkg-deb -I 360safeforl ...
- Java后端WebSocket的Tomcat实现(转载)
一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...
- PHP解决跨域访问的问题
在控制器的第一行放如下代码即可解决 header('Access-Control-Allow-Origin: http://ding.taozugong.com'); header('Access-C ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(2):SSM+Redis概念理解
一.SSM+Redis的结构图 在Java互联网中,以Spring+SpringMVC+MyBatis(SSM)作为主流框架,SSM+Redis的结构图如下: 二.下面介绍它们各自承担的功能: 1.S ...
- OpenSSH/PuTTY/SSH使用
OpenSSH/PuTTY/SSH 常用SSH服务指令 ① 启动SSH服务的命令 service sshd start ② 停止SSH服务的命令 service sshd stop ③ 重新启动SSH ...
- Displaying Speed and Direction Symbology from U and V vectors (转)
This blog shows you how to calculate and symbolize wind or current speed and direction when the unde ...
- Jquery Call ,apply,callee
//call function A() { name = "abc"; this.ShowName = function (val) { alert(name + ",& ...
- ASP.Net UpdatePanel控件 局部刷新 && 弹出提示信息
参考博客: https://blog.csdn.net/qq_35019337/article/details/69972552 https://blog.csdn.net/huangyezi/art ...
- 【kudu pk parquet】TPC-H Query2对比解析
这是[kudu pk parquet]的第二篇,query2在kudu和parquet上的对比解析,其中kudu包含有不能下发的谓词. 3台物理机,1T规模的数据集,impala和kudu版本是我们修 ...
- IT学习资源
介绍个人微信公众平台:Web开发笔记 含有免费学习资源,个人学习笔记,技术文章分享 资源篇 1.webapp书城开发 链接: https://pan.baidu.com/s/1pMHGKrh 密码: ...