[JAVA] 10.JAVA中的Lambda
作者:互联网
一个接口实现的简单例子:
Printer.java
public interface Printer {
void print(String message);
}
ConsolePrinter.java
public class ConsolePrinter implements Printer {
@Override
public void print(String message) {
System.out.println(message);
}
}
LambdaDemo.java
public class LambdaDemo {
public static void show(){
//通过实例化实现了接口的类
greet(new ConsolePrinter());
}
public static void greet(Printer printer){
printer.print("你好,master。");
}
}
匿名内部类
为了快捷调用greet方法,可以使用匿名内部类来实现这个接口
public static void show(){
//通过内部匿名类实现了接口的类
greet(new Printer() {
@Override
public void print(String message) {
}
});
}
由于这里只有一个需要实现的函数,所以可以使用lambda函数进行替换
public static void show(){
//通过Lambda函数实现了接口的类
greet(message -> {
System.out.println(message);
});
}
在这个lambda表达式中,只调用了一个方法,所以可以使用方法引用
来简化写法:
public static void show(){
//通过引用方法实现了接口的类
greet(System.out::println);
}
函数式接口
这里提到了两种编程模式:imperative program命令式编程,declarative program声明式编程。
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3);
//命令式编程
for (var item:list)
System.out.println(item);
//声明式编程
list.forEach(System.out::println);
}
链式消费者
得益于andThen方法,可以传入消费者,并返回消费者,可以支持链式调用。
Customer.andThen(Customer)
四种函数式接口
详见个人总结的Xmind
标签:10,JAVA,void,greet,static,接口,message,public,Lambda 来源: https://www.cnblogs.com/modai/p/12795388.html