您当前的位置:首页 > 计算机 > 编程开发 > Java

Java Scala Kotlin 语言快速切换对照表

时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz

旨在帮助会这三门语言之一的程序员快速上手其他两种语言,我会在工作中逐渐增加、修缮这一份文档,能力不高,水平有限,难免有错误,请大家提 ISSUE 或者 PR 指正! 至于涉及到一些 Scala 中有但是 Java 中没有的骚操作,如果是在编译期间实现的(比如 implicit/mapReduce),我就不说明了,除非一些简单的(例如操作符重载)可能会说明一下。

平时主要接触的就这三个语言,写 Spark 用 Scala,写 Spring Boot 2 用 Kotlin,会这两门语言怎么能不会 Java 呢(傲娇脸)。 还有一些 JVM 平台下的其他优秀语言,也欢迎各位大神 PR。

数据类型

基础类型

Java Scala Kotlin
int Int Int
double Double Double
long Long Long
float Float Float
String String String

说明: Java 的类型有对应的 Object 的版本(例如longMovidius->Long),在 Scala 下,转换的方式为:

x.asInstanceOf[AnyRef]

如果类型已经知道也可以使用比较地味一点的办法:

java.lang.Long.valueOf(x)

数组

项目\语言 Java Scala Kotlin
类型表征 T[] Array[T] Array
初始化 new T[]{a,b,c,d} Array(a,b,c,d) arrayOf(a,b,c,d)

说明: Scala 和 Kotlin 中有类型自动推导,不一定要严格的说明类型

Map

初始化

Java

Map<A,B> m = new HashMap<A,B>()
m.put(key1,value1)
m.put(key2,value2)

Scala

val m = Map[A,B]("x"->1,"y"->2)

Kotlin

val m = mapOf("x" to 1,"y" to 2)
遍历
// 只针对Java 8
data.forEach((k,v)->{
    //your function process k,v
})
// 如果你还在用Java 7什么的:
for(Map.Entry<K,V> entry:data.entrySet()){
    //your function process entry
}

Scala

data.foreach(kv=>{
    val key = kv._1
    val value = kv._2
    //your function process key and value
})

Kotlin

data.forEach { t, u ->
    // your function process t and u
}
细节补充

Scala 的 Map 有 mutable 和 immutable 之分,immutable 的 Map(默认就是 immutable)不能再加入内容,如果需要初始化一个可以加入内容的 Map 需要使用scala.collection.mutable中的类型。

Iterable

Iterable 的意思是可循环的,其中 Java 8 在引入 Lambda 表达式之后画风变得奇怪了,而且 mapReduce 之类的操作也好像不是那么回事儿(先要stream()一个),我会单独列出说明:

map操作

Java

// 只针对Java 8
data.stream().map(x->{
    //your function process x
})
// 如果你还在用Java 7什么的:
List<Y> yList = new ArrayList<Y>();
for(X x:data){
    // process x to y
    yList.add(y);
}

Scala

data.map(x=>{
    //your function process x
})

Kotlin

data.map {
    //your function process `it`
}

需要说明的是,Kotlin中匿名函数的写法和两者都不太一样,默认以it作为传入参数,一般也就这么处理。

reduce操作

Java

// 只针对Java 8
data.stream().reduce((a,b)->{
    //your function process a,b
})
// 如果你还在用Java 7什么的:
// 算了还是洗洗睡吧

Scala

data.reduce((a,b)=>{
    // 处理你的a和b
})

需要说明的是,Scala支持匿名变量,例如:

data.reduce((a,b)=>a+b)

可以写作

data.reduce( _ + _ )

第一个_代表第一个变量,第二个_代表第二个变量。

Kotlin

data.reduce {
    a,b -> // 处理你的a和b
}
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐