0、Java调用scala程序
java使用伴生对象: 伴生对象名 .MODULE .方法名();
public static void main(String[] args) {
//调用scala程序
Demo5$.MODULE$.myprint();
}
1、scala List用法
1、数组之间相加
1)++[B] 在A元素后面追加B元素
2)++: 在A元素后面追加B元素,与++区别的是结果使用的右边边的数据类型
var list1 = List(1);
var list4 = List('a');
var list5 = list4 ++ list1;
println(list5(0));
结果:a
3)A:::B list相加,A添加到B前面。
A.:::B list相加,A添加到B后面。
concat:拼接两个list。
val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil));
println("~"+site(0));
val site1 = "runoob1" ::("google1"::Nil);
println(site1(1))
val sit2 = site:::site1;
println(sit2(0))
val sit3 = site.:::(site1);
println(sit3(0))
val sit4 = List.concat(site,site1);
println(sit4(1));
结果:
~Runoob
google1
Runoob
runoob1
Google
2、元素与list之间相加
1) +: 在List的前面添加元素,符号左边的是元素,右边的是list
var list1 = List(1);
var list4 = List('a');
var list5 = list4 +: list1;
println(list5(0));
结果:List(a)
var list1 = List(1);
var list5 = 'a'+: list1;
println(list5(0));
结果:a
2)+:和+: 的区别是,符号左边的是list,右边的是元素,在list后面添加
var list1 = List(1);
var list4 = List('a');
var list5 = list4 :+ 1;
println(list5(1));
结果:1
var list1 = List(1);
var list4 = List('a');
var list5 = list4 :+ list1;
println(list5(1));
结果:List(1)
3)::元素直接拼接,元素添加到list前面
val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil));
val sitss = "test"::site;
println("~"+site(0));
println("~"+sitss(0));
结果:~Runoob
~test
3、遍历
1、/:应用二进制运算符起始值,从左到右遍历迭代所有元素
var list1 = List(1,2,3,4,5);
var a = (10 /: list1)(_-_);
println(a);
结果:-5
4、addstring
1、addString(b: StringBuilder) 对列表中的所有元素迭代将拼接成字符串
2、addString(b: StringBuilder, sep: String) 使用分隔符输出字符串
3、addString(b: StringBuilder, start: String, sep: String, end: String) 定义输出以什么开始、分割、结束.new StringBuilder()中的内容也被添加到了前面。
var list1 = List(1,2,3,4,5);
var result = list1.addString(new StringBuilder(),"MyJava myJava = new MyJava(",",",")");
println(result);
结果:MyJava myJava = new MyJava(1,2,3,4,5)
5、aggregate
举例说明:求平均值。
var list1 = List(1, 2, 3, 4, 5);
var result = list1.aggregate((0, 0))({ (sum, ch) => (sum._1 + ch, sum._2 + 1) }, { (p1, p2) => (p1._1+p2._1, p1._2+p2._2) });
println(result._1/result._2);
结果:3
首先,初始值是(0,0),这个值在后面2步会用到。
然后,(sum,ch) => (sum._1 + ch, sum._2 + 1),ch即是函数定义中的T,sum即为aggregate((0, 0))中的集合,ch是list中的元素。。所以sum._1 + ch, sum._2 + 1的过程如下。
1. 0+1, 0+1
2. 1+2, 1+1
3. 3+3, 2+1
4. 6+4, 3+1
5. 10+5, 4+1
结果result即是(15,5)。
相除得到3