Java ----- Lambda表达式

Lambda  是希腊字母表中排名第十一位的 (λ )的英文名称Lambda

lambda表达式的重要特征:

  可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

好处:避免内部类定义过多,去掉了没有意义的代码,只留下了核心逻辑,使代码看起来更加简洁,

函数式接口的定义:任何接口如果只包含唯一一个抽象方法,那么它就是一个函数式接口,

//函数式接口 :只有一个抽象方法
public interface Runnable{
  public abstract void run();  
}

使用场景:对于函数式接口可以使用Lambda表达式来创建该接口对象

Lambda表达式:属于函数式编程,与在es6 中的  借助箭头函数简化函数的书写方法基本一致

箭头函数小例子:

Lambda简单小例子:



//
一个简单的匿名函数 public class LambdaTest { public static void main(String[] args) { //匿名函数 ILambdaTest iNiming= new ILambdaTest() { @Override public void addLambda(String name, int age) { // TODO Auto-generated method stub System.out.println("我叫"+name+",今年"+age+"岁了"); } }; iNiming.addLambda("匿名类", 18); } //函数式接口,只有一个抽象方法 interface ILambdaTest{ abstract void addLambda(String name,int age); } //使用lambda 简化 //lambda 表达式 ILambdaTest iLambda = (String name,int age)->{ System.out.println("我叫"+name+",今年"+age+"岁了"); }; iLambda.addLambda("lambda", 8); } //也可以不写参数类型,不过要不写都不写 //lambda 表达式 ILambdaTest iLambda1 = (name, age)->{ System.out.println("我叫"+name+",今年"+age+"岁了"); }; iLambda1.addLambda("lambda", 8); //当只有一行代码时也可以不写大括号 //lambda 表达式 ILambdaTest iLambda1 = (name, age)->System.out.println("我叫"+name+",今年"+age+"岁了");; iLambda1.addLambda("lambda", 8);

运行一下

在多线程中的使用

new Thread(()->System.out.println("静态代理在线程中使用")).start();

 Lambda 的推导:一般实现,静态内部类,局部内部类,匿名类,lambad 表达式

lambad 表达式可以简化匿名类

package com.obge.threadstu;

public class LambdaStu {
    //2.使用静态内部类,实现接口
    static class ImpLambda2 implements  ILambda{
        @Override
        public void iMethod() {
            System.out.println("第二种实现接口方式,使用静态内部类");
        }
    }

    public static void main(String[] args) {

        //one、在另一个类中调用接口实现类的一般方式
        ImpLambda impLambda = new ImpLambda();
        impLambda.iMethod();


        //two、调用静态内部类
        ImpLambda2 impLambda2 = new ImpLambda2();
        impLambda2.iMethod();

        //3、在局部内部类中,实现接口
        class ImpLambda3 implements  ILambda{
            @Override
            public void iMethod() {
                System.out.println("第三种实现接口方式,使用局部内部类");
            }
        }
        //three、调用局部内部类
        ImpLambda3 impLambda3 = new ImpLambda3();
        impLambda3.iMethod();

        //4、使用匿名内部类(没有类名称,必须借助接口或父类)
       ILambda iLambda1 = new ILambda(){
            @Override
            public void iMethod() {
                System.out.println("第四种实现接口方式,使用匿名内部类");
            }
        };

        //four、调用匿名内部类
        iLambda1.iMethod();


        //5、lambda 简化匿名内部类
        ILambda iLambda2 = () ->System.out.println("第五种实现接口方式,使用lambda 表达式");
        //five、调用lambda 表达式
        iLambda2.iMethod();
    }

}


//函数式接口
interface ILambda{
    void iMethod();
}


//实现类
class ImpLambda implements  ILambda{

    @Override
    public void iMethod() {
        System.out.println("第一种实现接口方式");
    }
}

 

posted on 2021-01-29 09:00  obge  阅读(83)  评论(0编辑  收藏  举报