简化代码,避免匿名内部类定义过多
学习Lamda表达式的关键在于理解Functional Interface(函数式接口)
函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runnable {
public abstract void run();
}
package com.wang.lamda;public class LamdaDemo01 { //3、静态内部类 //把实现类写成静态内部类 static class Like2 implements ILike{ @Override public void Lambda() { System.out.println("i like lambda2"); } } public static void main(String[] args) { //接口new实现类 ILike like=new Like(); like.Lambda(); like=new Like2(); like.Lambda(); //4、局部内部类 class Like3 implements ILike{ @Override public void Lambda() { System.out.println("i like lambda3"); } } like=new Like3(); like.Lambda(); //5、匿名内部类,没有类的名称,必须借助接口或父类 like=new ILike() { @Override public void Lambda() { System.out.println("i like lambda4"); } }; like.Lambda(); //6、用lambda简化 like=()-> {System.out.println("i like lambda5");}; like.Lambda(); }}//1、定义一个函数式接口interface ILike{ //只要在接口里面,自动就是抽象的,不需要写出来 void Lambda();}//2、实现类class Like implements ILike{ @Override public void Lambda() { System.out.println("i like lambda"); }}
package com.wang.lamda;public class LambdaDemo { //4、外部类放到内部 静态内部类 static class Love2 implements ILove{ @Override public void love(int a) { System.out.println("i love you "+a); } } //main方法 public static void main(String[] args) { ILove love=new Love(); love.love(1); love=new Love2(); love.love(2); //5、局部内部类 class Love3 implements ILove{ @Override public void love(int a) { System.out.println("i love you "+a); } } love=new Love3(); love.love(3); //6、匿名内部类 love=new ILove() { @Override public void love(int a) { System.out.println("i love you "+a); } }; love.love(4); //7、Lambda表达式简化 方法中有参数 love=(int a)->{ System.out.println("i love you "+a); }; love.love(5); //7.1 简化Lambda love=a -> { System.out.println("i love you "+a); }; love.love(6); //7.2 love=a -> System.out.println("i love you "+a); love.love(7); }}//1、定义接口interface ILove{ //2、写方法,接口中是抽象方法,不用写abstract void love(int a);}//3、实现类class Love implements ILove{ @Override public void love(int a) { System.out.println("i love you "+a); }}
总结
Lambda表达式:
只有一行代码的情况下才能去掉花括号,只剩下一行
多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号
前提是接口是函数式接口