java8和scala的简略对比

简单介绍一下java和scala的不同,公司里暂时还没有使用到scala,也就没有更多的去看它的API,语法挺精简的,有兴趣的可以多看下官网:  http://www.scala-lang.org/api/current/#package

 

1、scala中的hello world:

def main(args: Array[String]){
    var n:int = 2;
    while(n<=6){
         // 此处可以scala中的插值操作符s,
         // 而不必要像java中使用+来连接每个字符串:"hello " + n + " world"
        println (s"hello ${n} world")  
        n += 1
    }
}

 

 

2、区间的表达

// java中的区间
IntStream.rangeClosed(1, 7).forEach(n -> System.out.println("hello " + n + " world"));
//guava中的区间
Range<Integer> range = Range.closed(1, 7);

// scala中的区间创建: start to end 或 start.to(end)
// 1 to 7 foreach { n => println(s"hello ${n} world")}
// groovy中的区间创建: 
// def list = (1..7).collect()

 

 

3、scala中基础数据结构

(1)对比map的创建方式

HashMap java_map = new HashMap();
HashMap<Object, Object> guava_map = Maps.newHashMap();
val scala_map = Map("name" -> "xiaomi", "email" -> "[email protected]")
def groovy_map = [name:'xiaomi', email:"[email protected]"]

 

(2)scala中val和var的区别

val: 表示变量为只读状态,类似java中使用final修饰过一样。

var: 表示变量可以被读写。

 

(3)不可变集合

之所以在scala中引入val不可变集合是因为,scala中的这些集合都是持久化的,当更新一个集合时实际上并不是在原集合上更新,而是创建了一个新的集合并持久化。

不可变集合的对比:

ImmutableList<Object> guava_list = ImmutableList.of();
Object java_list = Collections.unmodifiableList(list);
val scala_list = List("name", "email");

 

(4)对比java+scala中集合的操作(都采用并行流的方式)

List<String> views = Arrays.asList("wsbs","xwzx","bmfw","wshd");
views.parallelStream().filter(str -> str.length()>3).map(String::toUpperCase);
views.par filter(_.length()>3) map(_.toUpperCase())
// scala中的stream还可以记录曾经计算出过的值(在内存中使用缓存保存的)
// scala在调用方法时,若方法没有参数值,那么可以省略它的括号,比如直接toUpperCase

 

(5)元组

val person = ("xiaomi", "[email protected]");
println (person._1)  // xiaomi,取值时从1开始取
println (person._2)	// [email protected]

 

更多API请参考: http://www.scala-lang.org/api/current/#package

猜你喜欢

转载自study121007.iteye.com/blog/2299842
今日推荐