门户网站建设的成果/软文推广有哪些
Option类型
- 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。
- Scala Option(选项)类型用来表示一个值是可选的(有值或无值)。
- Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None 。
伪代码:
val myMap: Map[String, String] = Map("key1" -> "value")
val value1: Option[String] = myMap.get("key1")
val value2: Option[String] = myMap.get("key2")println(value1) // Some("value1")
println(value2) // None
- 在上面的代码中,myMap 一个是一个 Key 的类型是 String,Value 的类型是 String 的 hash map,但不一样的是他的 get() 返回的是一个叫 Option[String] 的类别。
- Scala 使用 Option[String] 来告诉你:「我会想办法回传一个 String,但也可能没有 String 给你」。
- myMap 里并没有 key2 这笔数据,get() 方法返回 None。
- Option 有两个子类别,一个是 Some,一个是 None,当他回传 Some 的时候,代表这个函式成功地给了你一个 String,而你可以透过 get() 这个函式拿到那个 String,如果他返回的是 None,则代表没有字符串可以给你。
代码示例:
package test12object Test1 {def main(args: Array[String]): Unit = {val sites = Map("runoob" -> "www.runoob.com", "goole" -> "www.goole.com")println(sites.get("runoob"))println(sites.get("baidu"))}
}
运行结果:
代码示例:
package test12object Test2 {def div(a: Int, b: Int): Option[Int] = {if (b == 0) {None} else {Some(a / b)}}def main(args: Array[String]): Unit = {val result = div(10, 2)val result1 = div(10, 0)//模式匹配打印结果result match {case Some(x) => println(x)case None => println("除数不能为0")}//getOrElse打印结果println(result.getOrElse(0))println(result1.getOrElse(0))}
}
异常处理
代码示例:
package test12object Test3 {def main(args: Array[String]): Unit = {val i = 10 / 0println("hello")}
}
运行结果:
执行程序,可以看到scala抛出了异常,而且没有打印出来"hello "。说明程序出现错误后就终止了。那怎么解决该问题呢?
在Scala中,可以使用异常处理来解决这个问题. 而异常处理又分为两种方式:
-
方式一: 捕获异常.
注意: 该方式处理完异常后, 程序会继续执行.
-
方式二: 抛出异常.
注意: 该方式处理完异常后, 程序会终止执行.
捕获异常
格式:
try {//可能会出现问题的代码
}
catch{case ex:异常类型 1 => //代码case ex:异常类型 2 => //代码
}
finally {//代码
}
代码示例:
package test12object Test4 {def main(args: Array[String]): Unit = {try {val i = 10 / 0println("hello1")} catch {case e: Exception => e.printStackTrace()} finally {println("hello3")}println("hello2")}
}
运行结果:
hello1不会打印,但是会打印hello3,hello2
try中的代码是我们编写的业务处理代码.
在catch中表示当出现某个异常时,需要执行的代码.
在finally中,写的是不管是否出现异常都会执行的代码.
抛出异常
代码示例:
package test12object Test5 {def main(args: Array[String]): Unit = {println("hello1")throw new Exception("我是一个bug")println("hello2")}}
运行结果:
会打印hello1,不会打印hello2
IO
读取数据
在Scala语言的Source单例对象中中, 提供了一些非常便捷的方法, 从而使开发者可以快速的从指定数据源(文本文件, URL地址等)中获取数据, 在使用Source单例对象之前, 需要先导包,
即import scala.io.Source
.
按行读取
格式:
// 1. 获取数据源文件对象.val source:BufferedSource = Source.fromFile("数据源文件的路径","编码表")// 2. 以行为单位读取数据.val lines:Iterator[String] = source.getLines()// 3. 将读取到的数据封装到列表中.val list 1 :List[String] = lines.toList// 4. 千万别忘记关闭Source对象.source.close()
代码示例:
需求:
在当前项目下创建data文件夹, 并在其中创建1.txt文本文件, 文件内容如下:
好好学习, 天天向上!
Hadoop, Zookeeper, Flume, Spark
Flink, Sqoop, HBase
选择黑马, 成就你一生的梦想.
以行为单位读取该文本文件中的数据, 并打印结果.
package test12import scala.io.Sourceobject Test6 {def main(args: Array[String]): Unit = {// 1. 获取数据源对象.val resource = Source.fromFile("src/resources/test.txt")// val lines: Iterator[String] = resource.getLines()// 2 .通过getLines()方法, 逐行获取文件中的数据.val lines = resource.getLines();// 3. 将获取到的每一条数据都封装到列表中.val list = lines.toList// 4. 打印结果list.foreach(println(_))// 5. 记得关闭source对象.resource.close()}
}
运行结果:
按字符读取
Scala还提供了以字符为单位读取数据
这种方式, 这种用法类似于迭代器, 读取数据之后, 我们可以通过hasNext()``,next()
方法, 灵活的获取数据.
格式:
//1. 获取数据源文件对象.
val source:BufferedSource = Source.fromFile("数据源文件的路径","编码表")
//2. 以字符为单位读取数据.
val iter:BufferedIterator[Char] = source.buffered
//3. 将读取到的数据封装到列表中.
while(iter.hasNext) print(iter.next())
//4. 千万别忘记关闭Source对象.
source.close()
如果文件不是很大, 我们可以直接把它读取到一个字符串中.
val str:String = source.mkString
代码示例:
package test12import scala.io.Sourceobject Test7 {def main(args: Array[String]): Unit = {// 1. 获取数据源对象.val resource = Source.fromFile("src/resources/test.txt")// 2. 获取数据源文件中的每一个字符.val iter = resource.buffered// 3. 通过hasNext(), next()方法获取数据.while (iter.hasNext) {print(iter.next())}// 4. 通过mkString方法, 直接把文件中的所有数据封装到一个字符串中.val str = resource.mkString// 5. 打印结果.println(str)// 6. 关闭source对象, 节约资源, 提高效率.resource.close()}
}
运行结果:
读取词法单元和数字
所谓的词法单元指的是以特定符号间隔开的字符串
, 如果数据源文件中的数据都是数字形式的字符串
, 我们可以很方便的从文件中直接获取这些数据, 例如:
10 2 5
11 2
5 1 3 2
格式
// 1. (^) 获取数据源文件对象.
val source:BufferedSource = Source.fromFile("数据源文件的路径","编码表")
// 2. 读取词法单元.
// \s表示空白字符(空格, \t, \r, \n等)
val arr:Array[String] = source.mkString.split("\\s+")
// 3. 将字符串转成对应的整数
val num = strNumber.map(_.toInt)
// 4. 千万别忘记关闭Source对象.
source.close()
代码示例:
在当前项目下创建data文件夹, 并在其中创建2.txt文本文件, 文件内容如下:
10 2 5 11 2 5 1 3 2读取文件中的所有整数, 将其加 1 后, 把结果打印到控制台.
package test12import scala.io.Sourceobject Test8 {def main(args: Array[String]): Unit = {val source = Source.fromFile("src/resources/test2.txt")// \s表示空白字符(空格, \t, \ra, \n等)// +表示数量词,即前面的内容至少出现一次,至多无限次val number = source.mkString.split("\\s+")//将字符串转成对应的整数number.map(_.toInt + 1).foreach(println(_))}
}
写入数据
Scala并没有内建的对写入文件的支持, 要写入数据到文件, 还是需要使用Java的类库.
代码示例:
package test12import java.io.FileOutputStreamobject Test9 {def main(args: Array[String]): Unit = {val pw = new FileOutputStream("src/resources/test3.txt")pw.write("好好学习,\r\n".getBytes())pw.write("天天向上!\r\n".getBytes())pw.close()println("写入成功!")}
}
运行结果:
高阶函数
Scala 混合了面向对象和函数式的特性,在函数式编程语言中,函数是“头等公民”,它和Int、String、Class等其他类型处于同等的地位,可以像其他类型的变量一样被传递和操作。也就是说, 如果一个函数的参数列表可以接收函数对象
, 那么这个函数就被称之为高阶函数(High-Order Function)
.像我们之前学习过的map方法,它就可以接收一个函数,完成List的转换。
常用的高阶函数有以下几类:
-
作为值的函数
-
匿名函数
-
闭包
-
柯里化等等
作为值的函数
需求
将一个整数列表中的每个元素转换为对应个数的小星星, 如下:
List( 1 , 2 , 3 ...) => *, **, ***
代码示例:
package test13object Test1 {def main(args: Array[String]): Unit = {val list = (1 to 10).toListprintln(list)val func = (a: Int) => "*" * a//list.map(这里需要一个函数)val list2 = list.map(func)println(list2)}
}
匿名函数
在Scala中,没有赋值给变量的函数就是匿名函数. 匿名函数是一种没有名称的函数,也称为lambda函数或函数字面量。在Scala中,可以使用下划线(_)或者箭头符号(=>)来创建匿名函数。
package test13object Test2 {def main(args: Array[String]): Unit = {val list = (1 to 10).toListprintln(list)//通过map函数用来进行转换, 该函数内部接收一个: 匿名函数.val list2 = list.map((a: Int) => "*" * a)println(list2)//简写val list3 = list.map("*" * _)println(list3)}
}
柯里化
柯里化是一种函数转换技术,它将具有多个参数的函数转换为一系列具有单一参数的函数。在Scala中,柯里化函数是指将一个多参数函数转换为一系列单参数函数的过程。柯里化的好处是,它可以方便地创建一些高阶函数,使得代码更加简洁和易于维护。同时,柯里化还可以帮助我们更好地利用Scala的类型系统,提高代码的类型安全性。
代码示例:
package test13object Test3 {//方式一普通写法def merge1(s1: String, s2: String): String = s1 + s2//方式二柯里化def merge2(s1: String)(s2: String) = s1 + s2def main(args: Array[String]): Unit = {println(merge1("abc", "def"))println(merge2("abc")("fff"))}
}
闭包
闭包是指一个函数,它可以访问其定义范围内的变量,即使在该函数被调用之后,这些变量仍然存在。在Scala中,闭包通常是由一个函数和一个或多个自由变量组成的。自由变量是在函数内部定义之前已经存在的变量,但是在函数内部仍然可以被访问。因此,闭包允许函数在其定义范围之外访问变量,并且可以在函数执行后继续存在。闭包在Scala中通常用于函数式编程,可以用来创建高阶函数和实现惰性求值等功能。
----------------------------------------------------------------------------------------------------------------------------
代码示例:
package test13object Test4 {def multiplyBy(factor: Int) = (x: Int) => factor * xdef main(args: Array[String]): Unit = {val timesTwo = multiplyBy(2)val timesThree = multiplyBy(3)println(timesTwo(5))println(timesThree(5))}
}
在这个例子中,我们定义了一个名为 multiplyBy
的函数,它接受一个整数参数 factor
,并返回一个匿名函数。这个匿名函数接受一个整数参数 x
,并返回 factor
乘以 x
的结果。
我们接着定义了两个变量 timesTwo
和 timesThree
,它们分别调用 multiplyBy
函数,并传递参数 2 和 3。这样,timesTwo
变量就是一个函数,它将传入的参数乘以 2,timesThree
变量也是一个函数,它将传入的参数乘以 3。
在最后的两行代码中,我们分别调用了 timesTwo
和 timesThree
变量所代表的函数,并传递参数 5。这样,我们就得到了 10 和 15 这两个结果。
这里的关键点在于,multiplyBy
函数返回的是一个匿名函数,这个匿名函数可以访问 multiplyBy
函数中定义的变量 factor
。这个匿名函数和它所在的函数形成了一个闭包,因为它“捕获”了 multiplyBy
函数中的变量。
这就是闭包的作用:它允许一个函数访问和操作它所在的作用域中的变量,即使这个函数已经离开了它所在的作用域。在这个例子中,我们可以看到闭包的实际应用,它让我们可以方便地创建一些类似于“乘法器”的函数,这些函数可以根据不同的因子来进行乘法运算。
相关文章:

Scala Option类型,异常处理,IO,高阶函数
Option类型 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。S…...

unity进阶学习笔记:单例模式
游戏框架: 游戏框架一般包括消息框架,状态机,管理器,工具类。 消息框架指游戏物体之的通信框架,虽然unity引擎自带一套消息框架,但该框架只能用于父子物体之间通信,无法实现大部分非父子关系的…...

软件测试——性能指标
登录功能示例: 并发用户数500; 响应时间2S; TPS到500; CPU不得超过75%; 性能指标有哪些? 响应时间 并发用户数 TPS CPU 内存 磁盘吞吐量 网络吞吐量 移动端FPS 移动端耗电量 APP启动时间 性能…...

leetcode 405. 数字转换为十六进制数
题目描述解题思路执行结果 leetcode 405. 数字转换为十六进制数. 题目描述 数字转换为十六进制数 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制…...

部门来了个软件测试,听说是00后,上来一顿操作给我看呆了...
前段时间公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司干了三年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍!给…...

使用篇丨链路追踪(Tracing)很简单:链路拓扑
作者:涯海 最近一年,小玉所在的业务部门发起了轰轰烈烈的微服务化运动,大量业务中台应用被拆分成更细粒度的微服务应用。为了迎接即将到来的双十一大促重保活动,小玉的主管让她在一周内梳理出订单中心的全局关键上下游依赖&#…...

2023年厦门等保二级备案办理流程
根据规定,已运营/运行或新建的第二级以上信息系统的企业,事业单位/行政机关/民办非企业单位/社团组织/其他组织必须办理等保备案。 2023年厦门等保二级备案办理流程 办理机构:公安局 办结时限:受理后10个工作日 办理方式:网上…...

提高开发效率,从这些小技巧开始——5个让你爱上IDEA的增加体验小技巧
前言 如果你是一名Java开发人员,那么你一定会使用IntelliJ IDEA这个IDE。IntelliJ IDEA作为目前最受欢迎的Java IDE之一,已经成为了众多Java开发人员必备的工具之一。但是,你是否知道如何利用IDEA中的一些小技巧来提高你的开发效率和体验呢&a…...

Python基础合集 练习22 (错误与异常处理语句2)
‘’’ try: 语句块 except: 语句块2 else ‘’’ class Mobe1(): def init(self) -> None: pass def mob1(self):while True:try:num int(input(请输入一个数: ))result 50 / numprint(result)print(50/{0}{1}.format(num, result))except (ZeroDivisionError, ValueEr…...

ELK -- kibana 用nginx代理后无法访问
背景: 本地搭建好elk后,一切正常,后面改成用nginx代理kibana的5601端口,发现代理后无法正常访问(未代理的地址可正常访问),花了很多时间去查问题,报错基本都是http://ip:port/spaces…...

什么是分布式事务
目录 分布式事务基础 事务 本地事务 分布式事务 分布式事务的场景 分布式事务解决方案 全局事务 优点 缺点 可靠消息服务 第一步 :消息由系统A投递到中间件 超时访问机制 最大努力通知 第一步:消息由系统A投递到中间件 第二步:消息…...

在 Python 中将整数转换为罗马数字
罗马数字使用以下七个符号书写。 Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000这些符号用于表示数以千计的数字。 罗马写20,可以用两个X拼成XX。 但是 XXXX 不…...

HashTable,Properties,TreeSet源码分析
目录 HashTable基本介绍 Hashtable和HashMap对比 Properties Properties基本介绍 应该如何选择集合 TreeSet源码分析 HashTable基本介绍 1)存放的元素是键值对:即K-V 2)hashtable的键和值都不能为null,否则会抛出NullPointerException 3)hashTab…...

多维图像去噪方法研究
一、背景介绍 由于传感器技术的快速发展,高光谱(HS)遥感(RS)成像为飞机等数据采集设备远距离观测和分析地球表面提供了大量的空间和光谱信息,航天器和卫星。 HS RS 技术的最新进展甚至革命为实现各种应用的…...

托福口语考察内容和形式
首先我们来简单介绍一下托福口语考试的构成和task1的任务形式。 目录 TOEFL Speaking Test Format Independent Task 1 Task 1 Test Format Task 1 Testing Interface(考试界面) Task 1 Question Type...

【地铁上的设计模式】--结构型模式:代理模式
什么是代理模式 代理模式是一种结构型设计模式,通过代理对象控制对原始对象的访问。代理对象充当客户端和实际对象之间的中介,隐藏了实际对象的复杂性,并提供了一些额外的控制。 在软件系统中,代理模式可以有多种应用。例如&…...

Oracle 体系结构
文章目录 Oracle体系结构Oracle的内存结构Oracle的进程结构服务器进程后台进程可选后台进程 物理存储结构逻辑存储结构 概念: Oracle server由Oracle instance和Oracle database组成,Oracle instance由后台进程和共享内存组成,Oracle的实例包…...

java手写日历系统(亲测)
package com.test.test02;import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Scanner;public class Test08 {//这是一个main方法,是程序的入口public static void main(String[] args) {//录入日期的StringScanner sc new Scanner…...

35-40的技术人员为什么会被“不友好”,请你们自身反思-拒做职场的“嗯嗯”怪
35-40真的是IT人员的一道坎吗? IT技术做不到35-40,可是我身边有大量35-40事业发达、职业发展更好的朋友。同时,我身边也有大量35-40被“毕业”的人更多。 本人经过7年来先后带队过3个大型研发团队,最少的也有60-70号人。最多的达到…...

工地烟火AI监控识别分析系统 yolov7
工地烟火AI监控识别分析系统通过yolov7网络模型技术,工地烟火AI监控识别分析系统对工地或者厂区现场监控区域内的烟火进行实时分析报警。YOLOv7 的发展方向与当前主流的实时目标检测器不同,研究团队希望它能够同时支持移动 GPU 和从边缘到云端的 GPU 设备…...

MATLAB算法实战应用案例精讲-【人工智能】对比学习(概念篇)(补充篇)
目录 前言 几个高频面试题目 基于对比学习(ContrastiveLearning)的文本表示模型【为什么】能学到文本【相似】度? 为什么对比学习能学到很好的语义相似度? 那么如何评价这个表示空间的质量呢? 知识储备 监督学习和非监督学习 算法原理…...

代码随想录算法训练营第三十一天 | 贪心1,想不到怎么找局部最优就做不出来
贪心算法理论基础 代码随想录 (programmercarl.com) 贪心算法理论基础!_哔哩哔哩_bilibili 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额ÿ…...

【SVN】版本控制管理的文件(夹)如何重命名
目录 一、前言二、操作步骤1. 使用SVN重命名(SVN rename)2. 输入新名称3. 确定重命名4. 立刻进行一次提交(commit)5. 补充 三、可能遇到的问题1. 情况一2. 情况二3. 情况三 一、前言 如果只是在本地的文件系统中修改SVN中的文件&a…...

必须包含数字,字母组合的密码正则表达式
输入要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在2-64位之间。 ^(?![0-9]$)(?![a-zA-Z]$)[0-9A-Za-z]{2,64}$ 分开来注释一下: ^ 匹配一行的开头位置 (?![0-9]$) 预测该位置后面不全是数字 (?![a-zA-Z]$) 预…...

JavaScript:栈和对列
文章目录 栈和对列Js 有栈与队列吗20. 有效的括号 - 力扣(LeetCode)思路 1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)思路代码分析array.join() 操作打印const s of str 操作遍历 150. 逆波兰表达式求值 - 力扣…...

[数据库系统] 一、创建表以及使用主键约束(educoder)
1.任务:在数据库中创建一个表。 2.需要掌握: 如何在指定数据库中创建表。 知识点:如何在指定数据库中创建表。 我们先来了解一下在数据库中创建表的规则: CREATE TABLE 表名(字段名,数据类型,字段名,数据类型,.....) 例如&…...

《走进对象村4》之面向对象的第一大特性——封装
文章目录 🚀文章导读1、封装的概念2、访问限定修饰符3、如何进行封装4、封装的优点: 🚀文章导读 在本篇文章中,将详细的对封装进行总结,文章仅仅是个人的一些理解,如果有错误的地方,还望指出看完…...

罗马数字转整数、整数转罗马数字----2023/5/4
罗马数字转整数----2023/5/4 1.罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D …...

2023-05-04:用go语言重写ffmpeg的scaling_video.c示例,用于实现视频缩放(Scaling)功能。
2023-05-04:用go语言重写ffmpeg的scaling_video.c示例,用于实现视频缩放(Scaling)功能。 答案2023-05-04: 这段代码实现了使用 libswscale 库进行视频缩放的功能。下面是程序的主要流程: 1.获取命令行参…...

QT Android QTextEdit 复制粘贴文本后出现多余数据问题
目录 问题原因解决方法 问题 QT Android QTextEdit 长按选中文本后,点击复制,然后粘贴到手机便签或者QQ中,出现多余数据 例如,要复制的文本为 只因你太美 但实际在便签中粘贴后的文本为 只因你太美 p, li { white-space: pre-wra…...