1.代替匿名内部类 实现Runnable线程案例 使用() -> {} 替代匿名类:(虽然还有其他的写法但这样写准没错)
public static void testPrimaryBefore(){
new Thread(new Runnable() {
public void run() {
System.out.println(10);
}
}).start();
}
public static void testLambda(){
new Thread(
() -> {
System.out.println("1");
}
).start();
}
2.实现List集合遍历
public static void testListErgodicBefore(List<String> li){
for (String s : li) {
System.out.println("S:"+s);
}
}
public static void testListErgodicLambda(List<String> li){
li.forEach(s -> {
System.out.println(s);
});
}
3.使用lambda和函数式接口 (函数式接口待会会写一篇博客贴上链接)
https://blog.csdn.net/qq_38983577/article/details/81806012
最后介绍介绍lambda底层实现原理:
简单来说,
就是代码进行编译时,会自动生成一个私有的静态函数private static void lambda$0(java.lang.String),
这个私有的静态函数干的就是Lambda表达式里面的内容.
编译器会根据Lambda表达式进入这个metafactory类
然后会使Lambda表达式生成了一个内部类并调用lambda$0()。
public static CallSite metafactory(MethodHandles.Lookup caller,
String invokedName,
MethodType invokedType,
MethodType samMethodType,
MethodHandle implMethod,
MethodType instantiatedMethodType)
throws LambdaConversionException {
AbstractValidatingLambdaMetafactory mf;
mf = new InnerClassLambdaMetafactory(caller, invokedType,
invokedName, samMethodType,
implMethod, instantiatedMethodType,
false, EMPTY_CLASS_ARRAY, EMPTY_MT_ARRAY);
mf.validateMetafactoryArgs();
return mf.buildCallSite();
}
下面这篇博客写的挺好的