lambda表达式:就是一个可传递的匿名内部类。
使用要求:接口有且仅有一个抽象方法。
使用匿名内部类,但不使用lambda表达式时我们一般使用方式:
接口A:
public interface InterfaceA {
void execute();
}
匿名内部类调用:
public class LambdaTest {
@Test
public void testLambda(){
(new InterfaceA() {
@Override
public void execute() {
System.out.println("hello a");
}
}).execute();
}
}
使用lambda表达式则可以简化为:
public class LambdaTest {
@Test
public void testLambda(){
// 无参无返回值的lambda表达式
InterfaceA ab=() -> {System.out.println("hello ab");};
ab.execute();
}
}
相比之下,代码简化了很多。
lambda表达式的语法:
1.无参无返回值:() -> {执行代码块}
2.无参有返回值:() -> { 执行代码块; return 返回值};
public interface InterfaceB {
String getString();
}
@Test
public void testLambda2(){
InterfaceB ab=() -> {
System.out.println("return string");
return "hello world";};
System.out.println(ab.getString());
}
3.有参无返回值:(参数a,参数b)->{代码块}
// 接口
public interface InterfaceA {
void execute(String string);
}
// 测试类
public class LambdaTest {
@Test
public void testLambda(){
InterfaceA ab=(a) -> {System.out.println(a);};
ab.execute("hello");
}
}
public interface InterfaceA {
void execute(String string,String string2);
}
@Test
public void testLambda(){
InterfaceA ab=(a,b) -> {System.out.println(a+" "+b);};
ab.execute("hello","world");
}
4,有参有返回值:(a,b) ->{执行代码块;return 返回值}
public interface InterfaceB {
String getString(String string,String string2);
}
@Test
public void testLambda2(){
InterfaceB ab=(a,b) -> {
System.out.println("return string");
return a+b;};
System.out.println(ab.getString("hello","world"));
}