文章目录
1、Java Lambda表达式
函数式接口
一种只含有一个抽象方法声明的接口
可以使用匿名内部类来实例化函数式接口的对象
通过Lambda表达式可以进一步简化代码
Lambda语法
(parameters) -> expression
(parameters) ->{ statements; }
示例
需求:学历年龄与薪资水平匹配
//声明一个接口
public interface SalarylevelIterface {
public Integer operation(Integer a, String content);
}
public class TestSalaryLevel {
public static void main(String[] args) {
SalarylevelIterface salarylevel=(Integer a, String content)->{
if(content.equals("初中") && a>=18 && a<20){
return 2000;
}else if(content.equals("高中") && a>=20 && a<22){
return 2200;
}else if(content.equals("大专") && a>=22 && a<24){
return 2400;
}else if(content.equals("本科") && a>=24){
return 3000;
}else {
return 0;
}
};
System.out.println(salarylevel.operation(18, "初中"));
}
}
2、Scala方法和函数
2.1函数定义
//函数的定义
def 函数名([参数列表]):[返回值类型]={
函数体
[return] 表达式
}
//函数调用
函数名(参数列表)
示例:函数的定义和使用
需求:传入两个参数,取较小的值
//函数的定义
def minValue(a:Int,b:Int): Int = if(a>b) b else a
//调用函数
println(minValue(10, 20))
需求:传入三个参数,进行相应计算
//函数的定义
def addValue(a:Int,b :Int, c:String):Int ={
if(c.equals("+")){
return a+b
}else if(c.equals("-")){
return a-b
}else if(c.equals("*")){
return a*b
}else {
return 0
}
}
//调用函数
println(addValue(20, 10, "+"))
需求:实现阶乘
//递归调用
def ji(n:Double):Double =if(n==2) 2 else n*ji(n-1)
println(ji(6))
2.2匿名函数定义
(参数列表)=>{函数体}
“=>”左边为参数列表
“=>”右边为函数体
//定义匿名函数
val aa=(a:Int,b:Int)=> a+b //用aa来接收匿名函数
//如果书写完整,完整格式如下
val aa:(Int,Int)=>Int=(a:Int,b:Int)=>{
a+b}
//调用匿名函数
println(aa(3,4))
2.3参数传递
2.3.1传值调用
传值调用时,参数只在调用时计算一次,后续重复使用计算的结果
def square(x: Int): Int = {
println(x) //3
x * x //计算3*3
}
square(1+2) //先计算1+2
2.3.2传名调用
传名调用时,参数在调用时不会计算,只有真正用到参数时才计算
def square(x: => Int): Int = {
println(x) //计算1+2
x * x //计算(1+2)*(1+2)
}
square(1+2) //调用时不计算
2.3.3参数长度不定
def showMsg2(name