目录
一、Lambda表达式本质上是一个匿名方法
让我们来看下面这个例子:
public int add(int x, int y) {
return x + y;
}
//转成Lambda表达式后是这个样子:
(int x, int y) -> x + y;
//参数类型也可以省略,Java编译器会根据上下文推断出来:
(x, y) -> x + y; //返回两数之和
或者
(x, y) -> { return x + y; } //显式指明返回值
二、Lambda表达式和函数式接口结合
//新建无参函数式接口
@FunctionalInterface
public interface InterfaceWithNoParam {
void run();
}
//实现函数式接口
public class TestJava8{
//匿名内部类
InterfaceWithNoParam param1 = new InterfaceWithNoParam() {
@Override
public void run() {
System.out.println("通过匿名内部类实现run()");
}
};
//Lambda表达式
//空括号表示无参
InterfaceWithNoParam param = () -> System.out.println("通过Lambda表达式实现run()") ;
}
三、其他形式的函数式接口及实现
1.有参无返回值
//有参无返回值
@FunctionalInterface
public interface InterfaceWithParams {
void run(String s);
}
//实现
InterfaceWithParams params = new InterfaceWithParams() {
@Override
public void run(String s) {
System.out.println("通过" + s + "实现run(String)");
}
};
InterfaceWithParams params1 = (String s) -> System.out.println("通过" + s + "实现run(String)");
2.无参有返回值
//无参有返回值
//接口
@FunctionalInterface
public interface InterfaceUnVoidWithNoParam {
String run();
}
//实现
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam = new InterfaceUnVoidWithNoParam() {
@Override
public String run() {
return "Hello World!";
}
};
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam1 = () -> "Hello Lambda!";
3.有参有返回值
//有参有返回值
//接口
@FunctionalInterface
public interface InterfaceUnVoidWithParams {
String run(Integer integer);
}
//实现
InterfaceUnVoidWithParams interfaceWithParams = new InterfaceUnVoidWithParams() {
@Override
public String run(Integer integer) {
return String.valueOf(integer);
}
};
InterfaceUnVoidWithParams interfaceWithParams1 = (Integer integer) -> String.valueOf(integer);