scala
文章平均质量分 63
bitcarmanlee
这个作者很懒,什么都没留下…
展开
-
scala伴生对象与case class用法
之前用过scala中的伴生对象,隔一段时间不用又有点忘记掉了。特此记录,方便后续查找。原创 2023-01-19 17:04:36 · 550 阅读 · 1 评论 -
scala中的字符串插值
从2.10版本开始,scala支持字符串插值。所谓的字符串插值,即允许开发人员将变量引用直接插入处理过的字面字符中,且提供了三种插值方式:s,f,raw。在字符串前面加上f,类似于实现了C语言中的printf功能,可以对字符串进行初步的格式化。raw插值的这种方式,当我们想输出\n,\t等特殊字符又不对其进行转义的时候,就特别好用。raw插值器与s插值器用法类似,不同的是它不在字符串中进行任何字面转义。在任何字符串前加上s,就可以在字符串中直接使用变量进行替换。同时,这种方式还支持处理表达式。原创 2023-01-17 17:57:07 · 694 阅读 · 1 评论 -
scala正则表达式 findFirstIn findAllIn findFirstMatchIn findAllMatchIn Match MatchData 提取分组
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice欢迎大家star,留言,一起学习进步0.引子节前最后一个工作日,在编写一个简单的正则表达式的时候,卡了比较长的时间。后来总结发现,还是对正则表达式的理解不是很深刻,于是利用假期的时间,特意比较详细地看了一下正则表达式相关内容并加以记录。1.findFirstIn findFirstMatchIn正则表达式中常用的方法包括findFirstIn,findFirstMatchIn等原创 2021-01-02 21:33:14 · 3447 阅读 · 0 评论 -
scopt解析参数实例
1.简介scopt是github上有人开发的一个用来解析参数的轻量级小工具,对于日常解析参数的场景基本够用,项目中使用也比较多,现在稍微记录一下用法。2.依赖在pom.xml文件中加入以下依赖 <dependency> <groupId>com.github.scopt</groupId> <artifactId>scopt_2.10</artifactId>原创 2020-07-15 19:54:19 · 1968 阅读 · 0 评论 -
scala for循环
1.与yield配合生成一个新的序列for循环与yield配合,可以生成一个新的序列。看个简单的例子:val res = for(i <- 1 to 8 if i%2 == 0) yield iprintln(res)最后的输出结果为:Vector(2, 4, 6, 8)2.生成一个递减的序列如果我们想要实现int i=10;i>=0;i--的功能,可以这样:for(i <- 10 to 0 by原创 2017-09-19 16:29:14 · 1099 阅读 · 0 评论 -
函数成了一等公民
函数式编程是这几年很受欢迎的一个话题,即使你是一个刚刚踏入职场的新人,如果在面试时能有意无意地透露出你懂那么一点点函数式编程,也会让你的面试官眼前一亮。然而函数式编程并不是一个新的概念,它的源头可以追溯到计算机尚未发明之前。本文将带领大家回顾一下函数式编程的历史,并使用 Scala 语言为大家讲解函数式编程的基本概念。1.函数式编程的历史有机会看到这篇文章的读者,大概都会知道阿兰·图灵(Alan T转载 2017-09-19 09:54:18 · 1583 阅读 · 0 评论 -
scala中的柯里化函数
1.什么是柯里化函数在scala相关的教程与参考文档里,经常会看到柯里化函数这个词。但是对于具体什么是柯里化函数,柯里化函数又有什么作用,其实可能很多同学都会有些疑惑。今天就跟大家来掰扯掰扯柯里化函数(Curry)。首先看两个简单的函数: def add(x: Int, y: Int) = x + y def addCurry(x: Int)(y: Int) = x + y以上两个函数实原创 2017-09-15 18:36:31 · 4256 阅读 · 0 评论 -
scala中的apply方法与unapply方法
1.apply方法当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖。请看下面一个简单的例子:class Foo(foo: String) {}object Foo { def apply(foo: String) : Foo = { new Foo(foo) }}定义了一个Foo类,并且在这个类中,有一个伴生对象Foo,里面定义了a原创 2017-08-05 22:17:29 · 18554 阅读 · 3 评论 -
scala中实现break与continue功能
在别的编码语言中,break与continue两种控制语句是非常常见的用法,一般也有对应的关键字。但是在scala中,没有专门的break与continue关键字。那怎么在循环中实现break与continue功能呢?1.实现break功能package com.xiaomi.leilei.test1import scala.util.control.Breaks._/** * Created原创 2017-08-11 22:03:42 · 8872 阅读 · 1 评论 -
missing arguments for method toArray in trait Collection
spark 任务中有如下一段代码: .combineByKey((v: String) => { val map = new util.TreeMap[String, String]() val (timestamp, phone) = (v.split("\t")(1), v.split("\t")(0))原创 2017-09-19 17:00:20 · 1125 阅读 · 0 评论 -
java.lang.Exception: Test class should have exactly one public constructor
在scala中写了一些测试代码,用来做项目中的单元测试。比如这种简单的测试代码:import org.junit.Testobject CollectionTest { @Test def listHead(): Unit = { val list = List(0, 1, 2, 3) println(list.head) }}在方法名上面右原创 2017-10-20 11:25:24 · 14746 阅读 · 2 评论 -
scala实现数值类型加法
在前面的文章里,我们讲了在java中如何利用泛型实现数值类型加法。具体可以参考博文http://blog.csdn.net/bitcarmanlee/article/details/78733637。 那么在scala中,我们怎么实现上面的需求呢?1.用 <: 模拟extends关键字行不通如果按照在java中的处理思路,我们可以这么尝试一下: def numberAdd[T <: Numb原创 2017-12-06 19:04:22 · 4979 阅读 · 0 评论 -
scala中的作用域保护
Scala中,访问修饰符可以通过使用限定词强调。格式为:private[x] 或protected[x]这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作”这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。 这种技巧在横跨了若干包的大型项目中非常有用,它允许你定义一些在你项目的若干子包中可见但对...转载 2018-03-19 09:44:20 · 1543 阅读 · 0 评论 -
java,python,scala发送http请求
项目中经常有发送http请求的需求,现在将java,python,scala中发送http请求的方法稍作记录,以备不时之需。1.java版本java代码相对来说最为冗长。。。这也是java的一贯风格。。。import org.apache.commons.lang3.StringUtils;import org.apache.http.HttpEntity;import org.apac...原创 2018-10-23 17:52:40 · 1423 阅读 · 0 评论 -
java scala中传递变长参数
1.java中传递变长参数在java中传递变长参数的方式为...,看个简单的实例 public static void argsTest(String... args) { for(String each: args) { System.out.println(each); } } public static vo...原创 2019-02-26 14:42:21 · 894 阅读 · 1 评论 -
scala中class,object,trait的区别
1.objectobject的特点是:1.可以拥有属性和方法,且默认都是"static"类型,可以直接用object名直接调用属性和方法,不需要通过new出来的对象(也不支持)。2.object里的main函数式应用程序的入口。3.object和class有很多和class相同的地方,可以extends父类或Trait,但object不可以extends object,即object无法作...原创 2019-09-26 10:16:50 · 3400 阅读 · 0 评论 -
scala中的枚举
1.scala枚举原理严格来说,和其它语言不同,Scala 并没有枚举这种类型。Scala 中的枚举值只是Enumeration下的Value类的实例,而不是枚举自身的实例。Value类的实例主要依靠其构造方法的两个值:id与name来构建。其中,id是自增长,name如果不指定时默认使用的就是值的名字。所以不像其它语言,Scala 并不能任意定义构造方法来构造枚举。abstract clas...原创 2019-09-26 15:30:25 · 3439 阅读 · 0 评论 -
scala中sorted,sortWith,sortBy用法详解
scala的集合中提供了三种排序的方式:sorted,sortWith,sortBy。那么这三种方式有什么不同呢?下面我们结合源码来分析一下1.sorted先来看看scala中sorted的源码。 def sorted[B >: A](implicit ord: Ordering[B]): Repr = { val len = this.length val arr = new A原创 2017-07-23 23:07:51 · 41858 阅读 · 0 评论 -
Scala 用Option[T] 避免NullPointerException
1.java里的Null Pointer Exception写过一阵子的Java后, 应该会对NullPointerException (NPE)这种东西很熟悉,基本上会碰到这种异常,就是你有一个变量是 null,但你却调用了它的方法,或是取某个的值。 举例而言,下面的 Java 代码就会抛出NPE异常:例1:String s1 = null;System.out.println("lengt转载 2017-07-23 13:31:48 · 1529 阅读 · 0 评论 -
scala 入门初探
看到有资料是如此介绍scala的:有python一样的开发效率,还有java一样的运行性能。看到这个介绍,本宝宝非常好奇,scala到底是怎样做到的。so,开始我们的scala之旅吧!1.scala环境的配置安装在之前的文章已经提到过,http://blog.csdn.net/bitcarmanlee/article/details/51302630,具体就不在啰嗦了,需要配置环境的同学们请参考之前原创 2016-07-24 17:33:01 · 1337 阅读 · 0 评论 -
scala 类定义构造函数与继承
1.scala中如何定义类scala中定义类的方式很简单class Point(xc:Int,yc:Int)上面这行代码就定义了一个类 1.首先是关键字class 2.其后是类名 Point 3.类名之后的括号中是构造函数的参数列表,这个例子中是类的两个变量xc,yc,且均为Int类型的数据。2.类的构造方法类的定义中可以有多个构造参数。与java中不同的是,scala类名称后直接加上构造函数原创 2016-11-09 23:52:04 · 10171 阅读 · 1 评论 -
scala中map与flatMap浅析
在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。由于命令式编程语言也可以通过类似函数指针的方式来实现高阶函数,函数式的最主要的好处主要是不可变性带来的。没有可变的状态,函数就是引用透明(Referential transparency)的和没有副作用(No Side Effect)。 任何一种函数式语言中,都有map函数与fa原创 2016-10-31 16:39:51 · 30163 阅读 · 1 评论 -
scala中内部函数的使用
在函数式语言中,函数是一等公民,也是最基本的功能块。通常为了使代码更加清晰易读,我们往往会写许多辅助函数。但是大家都知道,给函数或者变量起个合适的名字,是coding中最难的任务,没有之一。函数多了以后,很容易名字就冲突,而且暴露给外部过多的函数也会带来各种问题。在java里,我们是通过private method这种方式来解决。当然,scala里也可以这么干。但是我们既然说scala是函数式语言,原创 2016-10-31 21:57:06 · 5490 阅读 · 0 评论 -
函数式编程( Functional)与命令式编程( Imperative)对比
1.函数式编程带来的好处函数式编程近些年异军突起,又重新回到了人们的视线,并得到蓬勃发展。总结起来,无外乎如下好处: 1.减少了可变量(Immutable Variable)的声明,程序更为安全。 2.相比命令式编程,少了非常多的状态变量的声明与维护,天然适合高并发多现成并行计算等任务,这也是函数是编程近年又大热的重要原因。 3.代码更为简洁,可读性更强,对强迫症的同学来说是个重大福音。2.函原创 2016-11-14 14:47:35 · 14235 阅读 · 0 评论 -
scala 单例对象 伴生对象
1.单例对象Scala中没有静态方法或静态字段,但可以使用object这个语法结构来实现相同的功能。Object与class在语法层面上很相似,除了不能提供构造器参数外,object可以拥有class的所有特性。废话不多说,直接上代码object Singleton { var count = 0 def addCount:Long = { count += 1 count原创 2016-11-18 17:18:09 · 1555 阅读 · 0 评论 -
scala 匿名函数
1.匿名函数初探Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体,参数的类型是可省略的,Scala 的类型推测系统会推测出参数的类型。使用匿名函数后,我们的代码变得更简洁了。val numIncOne = (x:Int) => x + 1上面的表达式就定义了一个接受一个Int类型输入参数的匿名函数,使用起来也很简单numIncOne(2)2输入为空的匿名函数val print原创 2016-11-20 23:27:35 · 3544 阅读 · 1 评论 -
scala implicit隐式转化与隐式参数
scala的各种源码里,有大量的implicit关键字。老见到他晃来晃去又不知道为什么,本博主憋得慌,于是有了这篇小文章。1.最常见的隐式转换函数我们定义了一个方法test,接受的参数类型是String。当我们输出的参数为”101”的时候,显然是OK的。但是当输入的参数为101这个int时,显然就会有问题:scala> def printMsg(msg:String) = println(msg)原创 2016-12-05 22:40:26 · 1890 阅读 · 0 评论 -
Output path is shared between the same module error
在 IntelliJ IDEA中想编译运行某个scala文件的时候,IDE报了以下的错误:Error scalac: Output path .../eval/target/test-classes is shared between: Module 'eval' tests, Module 'eval' tests Output path .../eval/target/classes原创 2016-11-25 10:09:06 · 4646 阅读 · 0 评论 -
scala中一些常见用法
1.花括号与小括号的区别以下代码的用法,非常常见:val raw = List(("a",1),("b",2),("c",3))val res = raw.map{ case (key,value) => value }.reduce(_ + _)println(res)注意这里如果将map方法的大括号换成小括号,代码会报错。 方法中的花括号有2种意思: 1)scala中函数的小括号,可以用原创 2016-11-30 20:06:36 · 3895 阅读 · 0 评论 -
scala 正则表达式
正则表达式是所有攻城狮尤其是算法,数据相关攻城狮必备的技能。日常工作中免不了处理各种字符串与字符串操作,写好正则表达式能大幅度提高工作效率,提升工作愉悦度。现在就简单总结一下scala中常见的正则表达式用法。如果有对正则表达式不熟悉的同志们,可以查看正则表达式30分钟入门教程。1.匹配电话号码匹配电话号码是我们常见的需求之一。代码如下: def reg() = { val PH原创 2017-05-23 11:32:16 · 4534 阅读 · 0 评论 -
scala字符串变量替换
在scala中,字符串可以带s,f,raw前缀。这几个前缀都可以用来进行变量替换。下面来简单分析实验一下。1.s前缀s前缀的作用就是用来表示变量替换。 def test() = { val word = "hello" println(s"$word, world") }函数运行的结果为:hello, world2.f前缀f前缀在表示变量替换的同时,还可原创 2017-05-23 20:34:46 · 4773 阅读 · 0 评论 -
scala集合类详解
对scala中的集合类虽然有使用,但是一直处于一知半解的状态。尤其是与java中各种集合类的混合使用,虽然用过很多次,但是一直也没有做比较深入的了解与分析。正好趁着最近项目的需要,加上稍微有点时间,特意多花了一点时间对scala中的集合类做个详细的总结。1.数组Array在说集合类之前,先看看scala中的数组。与Java中不同的是,Scala中没有数组这一种类型。在Scala中,Array类的功能原创 2017-05-28 21:59:14 · 12644 阅读 · 3 评论 -
scala 数组详解
1.初始化数组想要初始化数组,可以跟java里面一样,使用new关键字,指定数据类型与数组长度。 def test() = { val arr = new Array[Int](3) arr.foreach(x => print(x + ",")) }上面代码run起来以后:0,0,0,也可以不使用new关键字,直接提供初始值: def test(原创 2017-06-17 11:35:39 · 3447 阅读 · 0 评论 -
模式匹配的匿名函数
注:本文的例子来自http://danielwestheide.com/blog/2012/12/12/the-neophytes-guide-to-scala-part-4-pattern-matching-anonymous-functions.html,根据自己的理解改动了部分代码并记录下来。1.二元组序列去掉词频太高或者太低的词Word Count是大数据版的Hello World,实际项目原创 2017-06-15 15:50:08 · 1095 阅读 · 0 评论 -
作为Scala语法糖的设计模式
Scala算是一门博采众家之长的语言,兼具OO与FP的特性,若使用恰当,可以更好地将OO与FP的各自优势发挥到极致;然而问题也随之而来,倘若过分地夸大OO特性,Scala就变成了一门精简版的Java,写出的是没有Scala Style的拙劣代码;倘若过分追求FP的不变性等特性,因为Scala在类型系统以及Monad实现的繁琐性,又可能导致代码变得复杂,不易阅读,反而得不偿失。看来,赋予程序员选择的自转载 2017-07-16 22:26:58 · 1623 阅读 · 0 评论