Open zgq105 opened 2 years ago
Lambda是简化匿名内部类的开发模式,是一种基于函数式接口实现的一种编程模式。主要的作用是简化代码,使得代码的简洁性和可读性更好。
匿名内部类写法:
new Thread(new Runnable() { @Override public void run() { System.out.println("HELLO"); } }).start();
Lambda表达式写法:
new Thread(() -> { System.out.println("HELLO"); }).start();
查看Runnable源码,如下:
@FunctionalInterface public interface Runnable { public abstract void run(); }
在Runnable接口类中,只有一个抽象方法run(),同时Runnable被@FunctionalInterface注解修饰,表示这个类是一个函数式接口,可以使用Lambda功能特性。(说明:@FunctionalInterface不是必须的,加上它编译器能检查接口是否符合函数式接口)
看一下下面这段代码,会正常吗?:
@FunctionalInterface public interface Work { void doWork(String str); void work2(); }
上面这段代码编译器会报错:Multiple non-overriding abstract methods found in interface com.guoqiang.Work,原因是@FunctionalInterface修饰的函数式接口只能有一个抽象方法。
看看下面这段代码:
@FunctionalInterface public interface Work { void doWork(String str); //抽象方法 default void work2(){ //非抽象方法,有方法的实现 } }
因此,上面这段代码只有一个抽象方法是正常的,符合函数式接口的规范,可以使用Lambda表达式,如下:
public class WorkTest { public WorkTest(Work work){ work.doWork("ZGQ"); work.work2(); } } new WorkTest(str -> { System.out.println("HELLO:"+str); //输出:HELLO:ZGQ });
1.Lambda表达式是什么?解决什么问题?怎么使用?
Lambda是简化匿名内部类的开发模式,是一种基于函数式接口实现的一种编程模式。主要的作用是简化代码,使得代码的简洁性和可读性更好。
匿名内部类写法:
Lambda表达式写法:
查看Runnable源码,如下:
在Runnable接口类中,只有一个抽象方法run(),同时Runnable被@FunctionalInterface注解修饰,表示这个类是一个函数式接口,可以使用Lambda功能特性。(说明:@FunctionalInterface不是必须的,加上它编译器能检查接口是否符合函数式接口)
看一下下面这段代码,会正常吗?:
上面这段代码编译器会报错:Multiple non-overriding abstract methods found in interface com.guoqiang.Work,原因是@FunctionalInterface修饰的函数式接口只能有一个抽象方法。
看看下面这段代码:
因此,上面这段代码只有一个抽象方法是正常的,符合函数式接口的规范,可以使用Lambda表达式,如下:
2.Lambda的原理剖析
3.Lambda在List中应用
4.Lambda在Map中应用
5.Stream API函数式编程