首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编程实践 | Scala亮瞎Java眼(一)

这是我在11月15日成都OpenParty分享一个题目,确有标题党嫌疑。Scala自然不是无所不能,Java也没有这么差劲,我希望给Java程序员提供另外一条可能选择。...Scala提供类型推断机制,也使得代码精简成为可能。Scala还有一个巧妙设计,就是允许在定义同时定义该类主构造函数。在大多数情况下,可以避免我们声明不必要构造函数。...Scala还提供了一些非常有用语法糖,如伴生对象,样例,既简化了接口,也简化了我们需要书写代码。...在Scala 2.11版本中,还突破了样例类属性个数约束。由于样例是不变,也能实现trait,因而通常作为message而被广泛应用到系统中。...例如在AKKA中,actor之间传递消息都应该尽量定义为样例。 支持OO与FP ? 将面向对象与函数式编程有机结合,本身就是Martin Odersky以及Scala目标。

75250

Flink实战(三) - 编程范式及核心概念

可以在POJO和Tuples中选择嵌套字段 例如,“user.zip”指的是POJO“zip”字段,其存储在POJO类型“user”字段中。...以下示例显示了一个键选择器函数,它返回一个对象字段: Java Scala 6 指定转换函数 大多数转换都需要用户自定义函数。...Types 7.1 元组 and Case 7.1.1 Java版本 元组是包含固定数量具有各种类型字段复合类型。...版本 Scala case(和Scala元组是case特例)是包含固定数量具有各种类型字段复合类型。...遵循Java Beans约定通常可以很好工作。 所有未标识为POJO类型都由Flink作为常规类型处理。 Flink将这些数据类型视为黑盒子,并且无法访问其内容(即,用于有效排序)。

1.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

Flink实战(三) - 编程范式及核心概念

可以在POJO和Tuples中选择嵌套字段 例如,“user.zip”指的是POJO“zip”字段,其存储在POJO类型“user”字段中。...Types 7.1 元组 and Case 7.1.1 Java版本 元组是包含固定数量具有各种类型字段复合类型。...版本 Scala case(和Scala元组是case特例)是包含固定数量具有各种类型字段复合类型。...7.4 General Class Types Flink支持大多数Java和Scala(API和自定义)。 限制适用于包含无法序列化字段,如文件指针,I / O流或其他本机资源。...遵循Java Beans约定通常可以很好工作。 所有未标识为POJO类型都由Flink作为常规类型处理。 Flink将这些数据类型视为黑盒子,并且无法访问其内容(即,用于有效排序)。

1.4K40

Scala编程规范与最佳实践

将更多 行为 从 里 移到 更细粒度 trait中 代码层 坚持写纯函数 习惯将函数作为变量和参数进行传递 重点学习scala集合和其API 尽量使用immutable代码,优先使用...表达式值没有依赖应用某个 状态|值|IO,依赖输入参数和计算算法 无副作用:函数不应该带来对应用某个 状态|值 mutable 不会对输入参数进行 改变 mutable 不执行IO操作或者和用户进行交互...方法 向存储器 读写 数据 方法 Java程序中一般很多:字段通常是 mutable; 类似set方法mutable了内部字段,而get方法则可能返回 可mutable数据结构 分析...java源码 然后慢慢重构为Scala 代码 善用 case class和 object单例对象 尽量使用immutable对象 尽量优先使用immutable集合和val 变量 private...scalaif/else match/case try/catch 都有返回值 优点:更易理解代码;没副作用,更容易测试 与scala语法绑定;更适合多核计算机 使用match/case

1.3K50

大数据--scala学习第一章:基础第二章:控制结构和函数第三章:数组第四章:字典和元组第五章:第六章:对象第七章:包和引入第八章:继承第九章文件和正则表达式第十章特质:接口第十一章操作符第十二章函

第五章: 1、简单和无参方法:字段和方法默认是public字段必须初始化,不用声明为public,一个文件中可以包含多个并且公有可见。...如果带参数则在名后()中定义,如果使用表5.1中定义参数,将在中为字段,如果不包含val和var,没有方法使用情况下改参数只用于语句访问,如果方法使用了就是对象私有字段。...4、特质中字段可以是具体也可以是抽象。如果你给出了初始值那么字段就是具体,实现该特质不是继承了该字段,而是类似于定义时定义了字段。抽象字段必须在实现中写出该字段。...3、不可变序列:vector类似于数组但底层机构是树,不是线性不过也支持快速随机访问, Range表示是一个整数序列,Range对象存储起始值,结束值和增值。...在模式匹配时可以将类型为Amount对象和样例进行匹配,然后参数会直接绑定然后直接用样例变量如下: amout math{ case Dollar(v)=>"$"+v case

4.4K20

Scala学习三-面向对象

其类似java中接口和抽象方法结合体,但又比java中其要强大,因为其可以定义抽象字段和普通字段、抽象方法和普通方法。而在java中接口中可以定义常量,不能定义变量。...一般用于保存数据(类似java中pojo) case class 样例名([val/var] 成员变量名1:类型1,成员变量名2:类型2,成员变量名3:类型3) 如果不写,则变量默认修饰符是val...} } 数组 数组就是用来存储多个同类型元素容器, 每个元素都有编号(也叫: 下标, 脚标, 索引), 且编号都是从0开始数....如:val arr2 = arr.sorted 元组 元组一般用来存储多个不同类型值。例如同时存储姓名,年龄,性别,出生年月这些数据, 就要用到元组来存储 了。并且元组长度和元素都是不可变。...它存储数据, 特点是: 有序, 可重复. 在Scala中,列表分为两种, 即: 不可变列表和可变列表. //val/var 变量名 = List(元素1,元素2,元素3,...)

66521

Scala:样例、模式匹配、Option、偏函数、泛型(三)

NOTE] 如果case表达式中无需使用到匹配到变量,可以使用下划线代代替 3.3 守卫 在Java中,只能简单添加多个case标签,例如:要匹配0-7,就需要写出来8个case语句。...示例 需求说明 创建两个样例Customer、Order Customer包含姓名、年龄字段 Order包含id字段 分别定义两个案例对象,并指定为Any类型 使用模式匹配这两个对象,并分别打印它们成员变量值...正则表达式 在scala中,可以很方便使用正则表达式来匹配数据。...包含姓名年龄两个字段 实现一个解构器,并使用match表达式进行模式匹配,提取字段。...示例 示例说明 实现一个Pair泛型 Pair包含两个字段,而且两个字段类型不固定 创建不同类型泛型对象,并打印 参考代码 case class Pair[T](var a:T, var b:

2.2K20

Table API&SQL基本概念及使用介绍

1,Scala隐式转换 Scala Table API提供DataSet,DataStream和Table隐式转换。通过导入包org.apache.flink.table.api.scala....Case Class:字段按位置映射,不支持空值,类型安全访问。 Tuple:字段通过位置映射,限制为22(Scala)或25(Java)字段,不支持空值,类型安全访问。...Atomic Type:表必须有单个字段,不支持空值,类型安全访问。 4.1 将表转换为DataStream 作为流式查询结果表将被动态更新,即当新记录到达查询输入流时,它会改变。...和DataSet API支持非常多样化类型,例如Tuples(内置Scala和Flink Java元组),POJO,Case Class和原子类型。...和Java)和Case Class(仅限Scala) Flink支持Scala内置元组,并为Java提供自己元组

6.3K70

03.Scala:样例、模式匹配、Option、偏函数、泛型

NOTE] 如果case表达式中无需使用到匹配到变量,可以使用下划线代代替 3.3 守卫 在Java中,只能简单添加多个case标签,例如:要匹配0-7,就需要写出来8个case语句。...示例 需求说明 创建两个样例Customer、Order Customer包含姓名、年龄字段 Order包含id字段 分别定义两个案例对象,并指定为Any类型 使用模式匹配这两个对象,并分别打印它们成员变量值...正则表达式 在scala中,可以很方便使用正则表达式来匹配数据。...包含姓名年龄两个字段 实现一个解构器,并使用match表达式进行模式匹配,提取字段。...示例 示例说明 实现一个Pair泛型 Pair包含两个字段,而且两个字段类型不固定 创建不同类型泛型对象,并打印 参考代码 case class Pair[T](var a:T, var b:

2K20

FunDA(2)- Streaming Data Operation:流式数据操作

在上一集讨论里我们介绍并实现了强类型返回结果行。使用强类型主要目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便、准确、高效选定数据字段。...type FDAAction[T] = DBIO[T] 5 } 记得有一次在一个Scala讨论区里遇到这样一个问题:如何把a表里status字段更新成b表status字段值,转化成SQL语句如下:...insertInitialData()} 81 Await.ready(initResult,Duration.Inf) 82 83 84 85 86 } 用join query先把这两个表相关字段值搬到内存转成强类型行...然后把每条DataRowasts字段值替换成bsts字段值: 1 import com.bayakala.funda.rowtypes.ActionType.FDAAction 2 def...字段值。

1.3K60

- Actor 与并发

Actor 是 Scala 基于消息传递并发模型,虽然自 Scala-2.10 其默认并发模型地位已被 Akka 取代,但这种与传统 Java、C++完全不一样并发模型依旧值得学习。..."actor test2" } } 输出: actor test1 这种用法在实际中并不常用,需要: 扩展超 Actor 重载 act 方法 调用扩展对象 start 方法 使用 scala.actors.Actor.actor...良好 Actor 风格 通过消息与 actor 通信 举个例子,一个 GoodActor可能会在发往 BadActor 消息中包含一个指向自己引用,来表明作为消息源自己。...确保消息对象是线程安全最佳途径是在消息中使用不可变对象。任何只有 val 字段且这些字段引用到不可变对象实例都是不可变。...("scala", self) receive { case msg => println( msg ) } } } 输出: scala Done 使用样本类 在上例中

55310

学好Spark必须要掌握Scala技术点

Scala中,有两种Map: 不可变Map:scala.collection.immutable.Map(可以存储一些配置或参数供多个线程访问,保证线程安全,具体还要结合业务实际场景),内容不可更改...,非并行化时初始化1次携带1次 _+_:初始值和list元素和和 */ val result = arr.aggregate(10)(_+_.sum,_+_) val res...修饰变量,只提供get() val id = "1" //var修饰变量,提供get()和set() var age: Int = 18 //私有字段,只有本类和本类伴生对象可以访问...,可以在主构造器中对字段赋值,对于主构造器中参数已赋值在new时候可以不再赋值 private[com.bigdata] class Study{}:只有com.bigdata或其子包下能访问Stu...和伴生对象之间可以相互访问私有的方法和属性,但字段被private[this]修饰只有本类能访问 3.2.2 应用程序对象 Scala程序都必须从一个对象main方法开始,可以通过扩展App

1.5K50

scala 集合详细

元组 在scala 中元组可以容纳不同类型元素,元组是不可变,用于函数返回多个值....xs retain p 保留集合 xs 中满足条件 p 元素。 xs.clear() 删除集合 xs 中所有元素。...Scala immutable.TreeSet 使用红黑树实现,它在维护元素顺序同时,也会保证二叉树平衡,即叶节点深度差最多为1 先创建排序规则 val myOrdering = Ordering.fromLessThan...第一个 Long 元素表示范围为0到63,第二个范围为64到127,以此类推(值为0到127非可变位集合通过直接将值存储到第一个或第两个 Long 字段方式,优化掉了数组处理消耗)。...对于每个 Long,如果有相应值包含于集合中则它对应位设置为1,否则该位为0。这里遵循规律是,位集合大小取决于存储在该集合最大整数大小。

88720

为Play初学者准备Scala基础知识

但是PlayScala没那么简单,虽然后者开发效率更高,但是由于Scala程序员匮乏,PlayScala适合团队较小(10人以下)并且较稳定情况下使用。...而Scala将这两种编程语言完美的融合到一起,形成一门更加强大JVM语言,同时Scala修正了Java很多不合理设计,新增了更多高级特性,学习Scala同时也是对Java一次深度回顾,让你对编程语言理解更加深刻...3.3 class Scalaclass定义和Java很相似: class Counter { private var value = 0 //你必须初始化字段 def increment...3.4 object Scala没有静态方法和静态字段,而是提供了object对象,也就是Java中单例对象,即全局只有一个实例。..., 类似于Java静态方法,只不过Scala将Java静态功能全交给object实现了。

1.7K60

Scala代码编写中常见十大陷阱

用法错误 把var和val认为是字段(fields): Scala强制使用统一访问准则(Uniform Access Principle),这使得我们无法直接引用一个字段。...所有对任意字段访问只能通过getters和setters。val和var事实上只是定义一个字段,getter作为val字段,对于var则定义一个setter。...共享命名空间是自动定义getter和setter而不是字段本身。通常程序员们会试图寻找一种访问字段方法,从而可以绕过限制——但这只是徒劳,统一访问准则是无法违背。...对于上面的这种情况,更好方法是使用一个。...◆不可以这样做交换: if a==b then b==a 特别,当考虑子类化时,超是否知道如何与一个子类进行对比,即使它不知道该子类是否存在。如果需要请查看canEquals用法。

1.1K50
领券