Java 8 Lambda 表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
照着多抄几遍就会了= =!
不带参数的接口方法:
/**
* 函数式接口:任何接口,如果只包含唯一一个抽象方法,那么他就是函数式接口;
* 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象;
* lambda表达式:
* 1.避免了内部类定义过多;
* 2.让代码看起来更加简洁;
* 3.去掉没有意义的代码,只保留核心逻辑;
*/
public class TestLambda {
//3.静态内部类
static class Like2 implements ILike{
@Override
public void lamdba() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
//接口new了一个实现类
ILike like= new Like();
like.lamdba();
like = new Like2();
like.lamdba();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lamdba() {
System.out.println("i like lambda3");
}
}
like = new Like3();
like.lamdba();
//5.匿名内部类,没有类的名称,必须借助接口或者父类
like = new ILike() {
@Override
public void lamdba() {
System.out.println("i like lambda4");
}
};
like.lamdba();
//6.jdk 1.8 lambda表达式
like = () ->{
System.out.println("i like lambda5");
};
like.lamdba();
}
}
//1.定义一个函数式接口
interface ILike{
//默认省略了public abstract
void lamdba();
}
//2.实现类
class Like implements ILike{
@Override
public void lamdba() {
System.out.println("i like lambda");
}
}
带参数的接口方法:
public class TestLambda2 {
//3.静态内部类
static class Love implements ILove{
@Override
public void love(int a ) {
System.out.println("i love you-->"+a);
}
}
public static void main(String[] args) {
//4.局部内部类,将类放到方法中
class Love implements ILove{
@Override
public void love(int a ) {
System.out.println("i love you-->"+a);
}
}
ILove love = new Love();
love.love(1);
//5.匿名内部类
ILove love2 = new ILove() {
@Override
public void love(int a) {
System.out.println("i love you-->"+a);
}
};
love2.love(2);
//6.匿名内部类进化成lambda表达式
ILove love3 =(int a) ->{
System.out.println("i love you-->"+a);
};
love3.love(3);
//7.lambda表达式简化:省略方法的参数类型
ILove love4 =(a) ->{
System.out.println("i love you-->"+a);
};
love4.love(4);
//8.lambda表达式简化:省略方法的参数类型,再省略括号
// 如果接口传递是多个参数,参数类型要去掉就全部去掉,但要保留()
ILove love5 =a ->{
System.out.println("i love you-->"+a);
};
love5.love(5);
//9.lambda表达式简化:省略方法的参数类型,再省略括号,再省略花括号
// lambda表达式,只有存在一行的代码的情况下,才可以去掉{},如果有多行代码就必须用{}包裹成代码块
ILove love6 =a -> System.out.println("i love you-->"+a);
love6.love(6);
}
}
//1.定义一个函数是接口(接口中只含有唯一一个抽象方法)
interface ILove{
void love(int a);
}
//2.接口的实现类
class Love implements ILove{
@Override
public void love(int a ) {
System.out.println("i love you-->"+a);
}
}