Lamda语法:
- Param->单行语句;
- (Params)->单行语句;
- (Params)->{多行语句};
-
Lamda使用条件:
接口中有且只有一个抽象方法;
Lamda简化规则:
- 参数类型可以省略。但是有多个参数的情况下,参数类型要么全么省略,要么不省略。
- 有且只有一个参数时,小括号可以省略
- 代码块的语句只有一条,可以省略大括号和分号,return关键字
例子:
-
没有返回值
-
没有参数
public interface NotArgumentLamda {
/**
* 没有参数
*/
public void NotArgumentLamda();
}
public void testNoArgument(){
NotArgumentLamda notArgumentLamda=null;
notArgumentLamda=()->System.err.println("hello 没有参数");
notArgumentLamda=()->{
System.err.println("hello 没有参数");
System.err.println("双条语句不能省略花括号");
};
notArgumentLamda.NotArgumentLamda();
}
- 有且只有一个参数
public interface SingleArgument {
/**
* 只有一个参数
* @param s
*/
public void singleArgument(String s);
}
@Test
public void testSingleArgument(){
SingleArgument singleArgument=null;
singleArgument=(String s)-> System.err.println(s);
singleArgument.singleArgument("单个参数");
singleArgument=(s)-> {
System.err.println(s);
System.err.println("方法体内有多条语句");
};
singleArgument.singleArgument("单个参数");
singleArgument=s-> System.err.println(s);
singleArgument.singleArgument("单个参数");
singleArgument=s->{
System.err.println(s);
System.err.println(s+"二次输出");
};
singleArgument.singleArgument("单个参数");
}
@Test
public void MultiArgument(){
MultiArgument multiArgument=null;
multiArgument=(String s1,String s2)-> {
System.err.println(s1+s2);
System.err.println("方法体内有多条语句");
};
multiArgument.multiArgument("参数1", "参数2");
multiArgument=(String s1,String s2)-> System.err.println(s1+s2);
multiArgument.multiArgument("参数1", "参数2");
multiArgument=(s1,s2)-> System.err.println(s1+s2);
multiArgument.multiArgument("参数1", "参数2");
}
-
多个参数
public interface MultiArgument {
/**
* 多个参数
* @param s1
* @param s2
*/
public void multiArgument(String s1,String s2);
}
@Test
public void MultiArgument(){
MultiArgument multiArgument=null;
multiArgument=(String s1,String s2)-> {
System.err.println(s1+s2);
System.err.println("方法体内有多条语句");
};
multiArgument.multiArgument("参数1", "参数2");
multiArgument=(String s1,String s2)-> System.err.println(s1+s2);
multiArgument.multiArgument("参数1", "参数2");
multiArgument=(s1,s2)-> System.err.println(s1+s2);
multiArgument.multiArgument("参数1", "参数2");
}
-
有返回值
public interface ArgumentAndReturn {
/*
有参数有返回值
*/
public int ArgumentAndReturn(int a,int b);
}
@Test
public void ArgumentAndReturn(){
ArgumentAndReturn argumentAndReturn=null;
argumentAndReturn=(int a,int b)->{return a+b;};
int s = argumentAndReturn.ArgumentAndReturn(3, 2);
System.err.println(s);
argumentAndReturn=(a,b)->a+b;
s=argumentAndReturn.ArgumentAndReturn(3, 2);
System.err.println(s);
}